{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d2baa321",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from scipy import signal\n",
    "import random"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "846cd252",
   "metadata": {},
   "source": [
    "# 读取微表情标注文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4bbae219",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Subject</th>\n",
       "      <th>Filename</th>\n",
       "      <th>Marker</th>\n",
       "      <th>OnsetTime</th>\n",
       "      <th>ApexTime</th>\n",
       "      <th>OffsetTime</th>\n",
       "      <th>OnsetFrame</th>\n",
       "      <th>ApexFrame</th>\n",
       "      <th>OffsetFrame</th>\n",
       "      <th>Action Units</th>\n",
       "      <th>Estimated Emotion</th>\n",
       "      <th>Macro/Micro</th>\n",
       "      <th>Date</th>\n",
       "      <th>dif</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>fengdengfang</td>\n",
       "      <td>angry_1_146_fengdengfang_20230802.avi</td>\n",
       "      <td>146</td>\n",
       "      <td>24.33</td>\n",
       "      <td>24.59</td>\n",
       "      <td>25.33</td>\n",
       "      <td>16-00-31-433-685</td>\n",
       "      <td>16-00-31-686-723</td>\n",
       "      <td>16-00-32-428-831</td>\n",
       "      <td>AU1</td>\n",
       "      <td>angry</td>\n",
       "      <td>Macro</td>\n",
       "      <td>2024年06月30日-14时31分</td>\n",
       "      <td>39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>wangxiaomin</td>\n",
       "      <td>angry_1_146_wangxiaomin_20230718.avi</td>\n",
       "      <td>146</td>\n",
       "      <td>12.09</td>\n",
       "      <td>12.68</td>\n",
       "      <td>12.68</td>\n",
       "      <td>11-05-27-805-813</td>\n",
       "      <td>11-05-28-399-902</td>\n",
       "      <td>11-05-28-399-902</td>\n",
       "      <td>AU4</td>\n",
       "      <td>angry</td>\n",
       "      <td>Macro</td>\n",
       "      <td>2024年05月15日-19时52分</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>wangxiaomin</td>\n",
       "      <td>angry_1_146_wangxiaomin_20230718.avi</td>\n",
       "      <td>146</td>\n",
       "      <td>3.32</td>\n",
       "      <td>3.60</td>\n",
       "      <td>3.60</td>\n",
       "      <td>11-05-19-038-498</td>\n",
       "      <td>11-05-19-318-540</td>\n",
       "      <td>11-05-19-318-540</td>\n",
       "      <td>AU4</td>\n",
       "      <td>angry</td>\n",
       "      <td>Macro</td>\n",
       "      <td>2024年05月15日-20时55分</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Subject                               Filename  Marker  OnsetTime  \\\n",
       "0  fengdengfang  angry_1_146_fengdengfang_20230802.avi     146      24.33   \n",
       "1   wangxiaomin   angry_1_146_wangxiaomin_20230718.avi     146      12.09   \n",
       "2   wangxiaomin   angry_1_146_wangxiaomin_20230718.avi     146       3.32   \n",
       "\n",
       "   ApexTime  OffsetTime        OnsetFrame         ApexFrame       OffsetFrame  \\\n",
       "0     24.59       25.33  16-00-31-433-685  16-00-31-686-723  16-00-32-428-831   \n",
       "1     12.68       12.68  11-05-27-805-813  11-05-28-399-902  11-05-28-399-902   \n",
       "2      3.60        3.60  11-05-19-038-498  11-05-19-318-540  11-05-19-318-540   \n",
       "\n",
       "  Action Units Estimated Emotion Macro/Micro                Date  dif  \n",
       "0          AU1             angry       Macro  2024年06月30日-14时31分   39  \n",
       "1          AU4             angry       Macro  2024年05月15日-19时52分   90  \n",
       "2          AU4             angry       Macro  2024年05月15日-20时55分   43  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "file_path = 'coding_file_combined.xlsx'\n",
    "df_xlsx = pd.read_excel(file_path)\n",
    "df_xlsx.head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7dc6abdf",
   "metadata": {},
   "source": [
    "## 获取微表情峰值帧字典"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "a84c0a4e",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "angry_1_146_yangmi_20230728: [8.51, 11.6, 26.38, 27.9, 28.6, 41.1, 41.18]\n",
      "angry_2_107_wangshuai_20230802: [28.5, 29.84]\n",
      "angry_2_107_wangzishan_20230717: [26.26]\n",
      "angry_2_107_zhaoshaohua_20230801: [17.11, 17.19, 25.15]\n",
      "angry_3_116_liyan_20230802: [1.97, 10.25, 41.57]\n",
      "angry_3_116_yangmi_20230728: [5.21, 5.22, 8.61, 21.45, 31.54, 34.42, 34.42, 51.69, 51.71]\n",
      "angry_3_116_zhaoshaohua_20230801: [25.62, 25.64]\n",
      "angry_4_125_wangziheng_20230727: [53.96]\n",
      "angry_4_125_zhengwansheng_20230718: [6.54]\n",
      "angry_5_133_wangxiaomin_20230718: [2.47, 2.55, 6.75]\n",
      "angry_6_142_wangxiaomin_20230718: [3.73]\n",
      "disgust_1_112_zhaoshaohua_20230801: [13.34, 13.38, 18.33, 21.1, 22.0, 34.75, 35.47, 35.48, 49.39]\n",
      "disgust_1_112_zhengwansheng_20230718: [49.1, 54.05]\n",
      "disgust_2_102_wangxiaomin_20230718: [53.15]\n",
      "disgust_2_102_yangmi_20230728: [2.18, 2.21, 3.17, 3.57, 10.28]\n",
      "disgust_2_102_zhangbuyuan_20230801: [52.1, 54.75]\n",
      "disgust_2_102_zhaoshaohua_20230801: [3.0, 5.22, 5.22, 7.23]\n",
      "disgust_3_110_wangxiaomin_20230718: [15.57, 26.5, 39.18]\n",
      "disgust_3_110_wangzishan_20230717: [20.77]\n",
      "disgust_3_110_xietao_20230803: [43.55]\n",
      "disgust_3_110_yangmi_20230728: [20.17, 27.9, 27.91, 41.5, 41.52, 42.7, 46.65, 46.73]\n",
      "disgust_3_110_zhangdi_20230721: [29.98, 32.69]\n",
      "disgust_3_110_zhaoshaohua_20230801: [2.65, 2.66, 3.96, 4.02, 10.06, 21.33, 21.34, 24.44, 36.6, 36.65, 45.6]\n",
      "disgust_4_119_wangshuai_20230802: [7.8]\n",
      "disgust_4_119_zhangbuyuan_20230801: [6.82]\n",
      "disgust_5_128_wangxiaomin_20230718: [6.46]\n",
      "disgust_5_128_zhangdi_20230721: [12.96, 26.65]\n",
      "disgust_5_128_zhengwansheng_20230718: [3.21]\n",
      "disgust_6_137_zhaolei_20230803: [18.98]\n",
      "fear_1_134_wangxiaomin_20230718: [18.79, 18.8]\n",
      "fear_1_134_zhengwansheng_20230718: [20.72, 26.51]\n",
      "fear_2_104_fengdengfang_20230802: [26.6, 39.15, 55.06]\n",
      "fear_2_104_liyan_20230802: [12.66, 12.72, 40.06, 42.42]\n",
      "fear_2_104_wangziheng_20230727: [15.51, 30.23, 42.55, 42.6]\n",
      "fear_3_113_wangxiaomin_20230718: [28.78]\n",
      "fear_3_113_wangzishan_20230717: [22.18]\n",
      "fear_3_113_zhengwansheng_20230718: [2.31]\n",
      "fear_4_121_wangziheng_20230727: [31.27]\n",
      "fear_4_121_yangmi_20230728: [2.06, 2.1, 7.74, 14.41, 14.47, 17.71]\n",
      "fear_4_121_yansen_20230731: [29.88, 29.9]\n",
      "fear_4_121_zhaolei_20230803: [4.2]\n",
      "fear_5_130_fengdengfang_20230802: [56.83]\n",
      "fear_5_130_wangshuai_20230802: [28.28]\n",
      "fear_5_130_zhaoshaohua_20230801: [12.41, 12.45, 12.86, 12.91, 17.3]\n",
      "fear_6_139_fengdengfang_20230802: [31.54]\n",
      "fear_6_139_zhangdi_20230721: [31.24, 53.73, 53.74]\n",
      "fear_6_139_zhaolei_20230803: [8.24]\n",
      "fear_6_139_zhengwansheng_20230718: [40.88, 52.87]\n",
      "happy_1_123_wangziheng_20230727: [29.65]\n",
      "happy_1_123_yansen_20230731: [5.2, 5.2]\n",
      "happy_1_123_zhaolei_20230803: [9.72, 12.36, 12.4, 24.0, 24.05, 38.72, 41.2, 41.27]\n",
      "happy_1_123_zhaoshaohua_20230801: [32.85, 40.23]\n",
      "happy_1_123_zhengwansheng_20230718: [13.21]\n",
      "happy_2_103_fengdengfang_20230802: [18.68, 41.86]\n",
      "happy_2_103_zhangbuyuan_20230801: [46.14]\n",
      "happy_2_103_zhaoshaohua_20230801: [7.32, 7.89, 11.81, 12.18, 15.87, 43.91, 48.14]\n",
      "happy_2_103_zhengwansheng_20230718: [6.69]\n",
      "happy_3_111_wangshuai_20230802: [5.88]\n",
      "happy_3_111_wangziheng_20230727: [41.78]\n",
      "happy_4_120_yangmi_20230728: [27.34, 34.99, 35.53]\n",
      "happy_4_120_zhaoshaohua_20230801: [7.84, 27.74, 27.76, 48.33, 48.37]\n",
      "happy_5_129_yangmi_20230728: [40.3, 53.76]\n",
      "happy_5_129_zhengwansheng_20230718: [49.85]\n",
      "happy_6_138_wangxiaomin_20230718: [3.0]\n",
      "happy_6_138_wangziheng_20230727: [26.2, 26.29, 26.96, 27.12, 27.58, 35.06]\n",
      "happy_6_138_wangzishan_20230717: [35.03, 36.98]\n",
      "happy_6_138_zhaoshaohua_20230801: [16.64, 46.9]\n",
      "sad_1_101_wangshuai_20230802: [32.85, 57.55]\n",
      "sad_1_101_zhaoshaohua_20230801: [15.06, 19.69, 22.32, 23.24, 25.55]\n",
      "sad_1_101_zhengwansheng_20230718: [48.4]\n",
      "sad_2_148_wangxiaomin_20230718: [9.24, 12.77, 16.71, 16.76]\n",
      "sad_2_148_zhaoshaohua_20230801: [23.5, 23.5]\n",
      "sad_3_109_wangshuai_20230802: [19.45, 19.5, 43.8, 43.83]\n",
      "sad_4_118_zhaoshaohua_20230801: [3.23, 5.23, 5.25, 13.93, 13.93, 17.96, 24.13, 40.45]\n",
      "sad_4_118_zhengwansheng_20230718: [20.44]\n",
      "sad_5_127_wangziheng_20230727: [56.19, 56.23]\n",
      "sad_5_127_yangmi_20230728: [16.59]\n",
      "sad_5_127_zhaolei_20230803: [10.84, 25.14]\n",
      "sad_6_136_wangxiaomin_20230718: [18.01, 19.76, 19.77, 23.88, 28.95]\n",
      "sad_6_136_zhaoshaohua_20230801: [11.98, 31.13]\n",
      "angry_1_146_wangxiaomin_20230718: [3.6, 39.86]\n",
      "disgust_1_112_fengdengfang_20230802: [41.81]\n",
      "disgust_1_112_liyan_20230802: [46.6]\n",
      "disgust_1_112_wangziheng_20230727: [33.51]\n",
      "disgust_2_102_yansen_20230731: [7.46]\n",
      "disgust_2_102_zhangdi_20230721: [3.97]\n",
      "disgust_2_102_zhengwansheng_20230718: [50.12]\n",
      "disgust_3_110_fengdengfang_20230802: [36.63]\n",
      "disgust_3_110_zhengwansheng_20230718: [33.81]\n",
      "disgust_4_119_yangmi_20230728: [23.67]\n",
      "disgust_5_128_yangmi_20230728: [37.35]\n",
      "disgust_5_128_zhangbuyuan_20230801: [36.97]\n",
      "surprise_1_147_liyan_20230802: [53.21]\n",
      "surprise_1_147_wangziheng_20230727: [50.9]\n",
      "surprise_1_147_yangmi_20230728: [38.42]\n",
      "surprise_1_147_zhengwansheng_20230718: [28.05]\n",
      "surprise_2_108_wangshuai_20230802: [20.9, 22.48]\n",
      "surprise_2_108_wangzishan_20230717: [12.48]\n",
      "surprise_2_108_zhaoshaohua_20230801: [12.3]\n",
      "surprise_3_117_zhaoshaohua_20230801: [6.46, 25.89, 26.2, 35.93, 48.87]\n",
      "surprise_4_126_wangshuai_20230802: [11.46, 25.2]\n",
      "surprise_4_126_wangzishan_20230717: [18.9, 19.87]\n",
      "surprise_4_126_zhaoshaohua_20230801: [31.91, 32.16]\n",
      "surprise_4_126_zhengwansheng_20230718: [17.0]\n",
      "surprise_5_135_liyan_20230802: [19.82, 30.0]\n",
      "surprise_6_143_zhangdi_20230721: [20.72]\n",
      "angry_2_107_wangziheng_20230727: [16.21, 34.78]\n",
      "angry_3_116_wangxiaomin_20230718: [9.67, 40.0]\n",
      "angry_4_125_yangmi_20230728: [1.43]\n",
      "angry_5_133_wangzishan_20230717: [22.13]\n",
      "angry_5_133_zhaolei_20230803: [17.28]\n",
      "angry_6_142_wangshuai_20230802: [17.67]\n",
      "angry_6_142_wangziheng_20230727: [25.36]\n",
      "angry_6_142_zhaoshaohua_20230801: [11.43]\n",
      "tense_1_144_fengdengfang_20230802: [10.6]\n",
      "tense_1_144_wangxiaomin_20230718: [52.0, 52.49]\n",
      "tense_1_144_yangmi_20230728: [28.98]\n",
      "tense_1_144_zhaolei_20230803: [32.34]\n",
      "tense_2_105_yangmi_20230728: [48.95]\n",
      "tense_2_105_zhaoshaohua_20230801: [19.05, 22.3]\n",
      "tense_3_114_wangziheng_20230727: [41.99]\n",
      "tense_3_114_yangmi_20230728: [6.79, 9.39, 23.63]\n",
      "tense_3_114_zhangdi_20230721: [25.29]\n",
      "tense_5_131_wangziheng_20230727: [10.15]\n",
      "tense_5_131_wangzishan_20230717: [40.94]\n",
      "tense_6_140_zhaoshaohua_20230801: [12.67, 27.36]\n",
      "happy_1_123_wangzishan_20230717: [48.42]\n",
      "happy_2_103_wangziheng_20230727: [7.54]\n",
      "sad_1_101_fengdengfang_20230802: [15.37]\n",
      "sad_2_148_wangziheng_20230727: [36.94]\n",
      "sad_4_118_wangxiaomin_20230718: [15.77, 24.84]\n",
      "sad_4_118_wangziheng_20230727: [28.11]\n",
      "sad_5_127_wangxiaomin_20230718: [7.9, 44.53]\n",
      "sad_5_127_zhaoshaohua_20230801: [18.05]\n",
      "fear_2_104_zhaoshaohua_20230801: [5.01]\n",
      "fear_3_113_wangshuai_20230802: [17.99]\n",
      "fear_3_113_wangziheng_20230727: [39.73]\n",
      "fear_4_121_wangshuai_20230802: [39.1]\n",
      "happy_4_120_wangziheng_20230727: [13.54]\n",
      "happy_4_120_yansen_20230731: [7.33]\n",
      "happy_5_129_wangziheng_20230727: [9.75]\n"
     ]
    }
   ],
   "source": [
    "df_micro = df_xlsx[df_xlsx['Macro/Micro']=='Micro']\n",
    "\n",
    "# 初始化一个空的字典来存储键值对\n",
    "subject_apextime_micro_dict = {}\n",
    "\n",
    "# 遍历DataFrame的每一行\n",
    "for index, row in df_micro.iterrows():\n",
    "    key = row['Filename'].split('.')[0]\n",
    "    value = row['ApexTime']\n",
    "    \n",
    "    # 如果Subject已经在字典中，将ApexTime添加到对应的列表\n",
    "    if key in subject_apextime_micro_dict:\n",
    "        subject_apextime_micro_dict[key].append(value)\n",
    "        # 对列表进行排序以确保它是升序的\n",
    "        subject_apextime_micro_dict[key] = sorted(subject_apextime_micro_dict[key])\n",
    "    else:\n",
    "        # 如果Subject不在字典中，创建一个新的列表并添加ApexTime\n",
    "        subject_apextime_micro_dict[key] = [value]\n",
    "\n",
    "# 打印结果字典\n",
    "for key, value in subject_apextime_micro_dict.items():\n",
    "    print(f\"{key}: {value}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f350d42f",
   "metadata": {},
   "source": [
    "# read Neuroscan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5c54bc1d",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "import mne\n",
    "from mne.io import read_raw_eeglab\n",
    "from scipy.io import savemat, loadmat\n",
    "import h5py\n",
    "import neurokit2 as nk\n",
    "import pandas as pd\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.model_selection import StratifiedShuffleSplit\n",
    "from sklearn.datasets import make_classification\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn import svm\n",
    "import warnings\n",
    "from scipy.io import savemat\n",
    "import matplotlib.pyplot as plt\n",
    "warnings.filterwarnings('ignore', category=UserWarning)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3df6398a",
   "metadata": {},
   "source": [
    "## 加载要分析的被试数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d869f450",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "filenames_set: ['fengdengfang_20230802.set', 'linjiaying_20230719.set', 'liyan_20230802.set', 'lizhuoru_20230720.set', 'lvpinxin_20230803.set', 'mayiran_20230718.set', 'wangjintao_20230719.set', 'wangshuai_20230802.set', 'wangsixian_20230719.set', 'wangxiaomin_20230718.set', 'wangziheng_20230727.set', 'wangzishan_20230717.set', 'xietao_20230803.set', 'yangmi_20230728.set', 'yansen_20230731.set', 'yuelu_20230720.set', 'zhangbuyuan_20230801.set', 'zhangdi_20230721.set', 'zhaolei_20230803.set', 'zhaoshaohua_20230801.set', 'zhengwansheng_20230718.set']\n",
      "len(filenames_set): 21\n"
     ]
    }
   ],
   "source": [
    "eeg_path = 'eeg_py\\eeg_for_mne'\n",
    "\n",
    "for dirpath, dirnames, filenames in os.walk(eeg_path):\n",
    "    filenames_set = [s for s in filenames if '.set' in s]\n",
    "    print('filenames_set:', filenames_set)\n",
    "    print('len(filenames_set):', len(filenames_set))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "223cb559",
   "metadata": {},
   "source": [
    "每个文件时长约为1小时，行数约为：60×60×1000=3600000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "06900cb2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'fengdengfang_20230802.set'"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "selected_subject = 'fengdengfang_20230802'\n",
    "selected_file = selected_subject + '.set'\n",
    "selected_file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "c95dbf02",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\fengdengfang_20230802.fdt\n",
      "raw.annotations: <Annotations | 98 segments: 100 (48), 101 (1), 102 (1), 103 (1), 104 (1), ...>\n",
      "\n",
      "raw.annotations.description): ['77', '88', '101', '100', '102', '100', '103', '100', '104', '100', '105', '100', '106', '100', '107', '100', '108', '100', '109', '100', '110', '100', '111', '100', '112', '100', '113', '100', '114', '100', '115', '100', '116', '100', '117', '100', '118', '100', '119', '100', '120', '100', '121', '100', '122', '100', '123', '100', '124', '100', '125', '100', '126', '100', '127', '100', '128', '100', '129', '100', '130', '100', '131', '100', '132', '100', '133', '100', '134', '100', '135', '100', '136', '100', '137', '100', '138', '100', '139', '100', '140', '100', '141', '100', '142', '100', '143', '100', '144', '100', '145', '100', '146', '100', '147', '100', '148', '100']\n"
     ]
    }
   ],
   "source": [
    "raw = mne.io.read_raw_eeglab(os.path.join(eeg_path, selected_file), \n",
    "    eog=(), \n",
    "    preload=False, \n",
    "    uint16_codec=None, \n",
    "    montage_units='auto', \n",
    "    verbose=None\n",
    ")\n",
    "\n",
    "print('raw.annotations:', raw.annotations)\n",
    "print('')\n",
    "print('raw.annotations.description):', list(raw.annotations.description))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5cdda68f",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "348fc58c",
   "metadata": {},
   "source": [
    "### 删除异常值\n",
    "- 原始数据的marker会产生无效标签，如77、88，需要过滤掉"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "958832da",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "markers_del: ['88', '77']\n",
      "raw.annotations.description: ['77' '88' '101' '100' '102' '100' '103' '100' '104' '100' '105' '100'\n",
      " '106' '100' '107' '100' '108' '100' '109' '100' '110' '100' '111' '100'\n",
      " '112' '100' '113' '100' '114' '100' '115' '100' '116' '100' '117' '100'\n",
      " '118' '100' '119' '100' '120' '100' '121' '100' '122' '100' '123' '100'\n",
      " '124' '100' '125' '100' '126' '100' '127' '100' '128' '100' '129' '100'\n",
      " '130' '100' '131' '100' '132' '100' '133' '100' '134' '100' '135' '100'\n",
      " '136' '100' '137' '100' '138' '100' '139' '100' '140' '100' '141' '100'\n",
      " '142' '100' '143' '100' '144' '100' '145' '100' '146' '100' '147' '100'\n",
      " '148' '100']\n",
      "to_remove: [1, 0]\n",
      "raw.annotations: <Annotations | 96 segments: 100 (48), 101 (1), 102 (1), 103 (1), 104 (1), ...>\n",
      "raw.annotations.description: ['101' '100' '102' '100' '103' '100' '104' '100' '105' '100' '106' '100'\n",
      " '107' '100' '108' '100' '109' '100' '110' '100' '111' '100' '112' '100'\n",
      " '113' '100' '114' '100' '115' '100' '116' '100' '117' '100' '118' '100'\n",
      " '119' '100' '120' '100' '121' '100' '122' '100' '123' '100' '124' '100'\n",
      " '125' '100' '126' '100' '127' '100' '128' '100' '129' '100' '130' '100'\n",
      " '131' '100' '132' '100' '133' '100' '134' '100' '135' '100' '136' '100'\n",
      " '137' '100' '138' '100' '139' '100' '140' '100' '141' '100' '142' '100'\n",
      " '143' '100' '144' '100' '145' '100' '146' '100' '147' '100' '148' '100']\n"
     ]
    }
   ],
   "source": [
    "markers_all = list(raw.annotations.description)\n",
    "markers_retain = [str(marker) for marker in list(range(99, 149))] # 100~148\n",
    "markers_del = list(set([item for item in markers_all if item not in markers_retain]))\n",
    "print('markers_del:', markers_del)\n",
    "\n",
    "print('raw.annotations.description:', raw.annotations.description)\n",
    "\n",
    "to_remove = []\n",
    "for m in markers_del:\n",
    "    to_remove.append(list(raw.annotations.description).index(m))\n",
    "    raw.annotations.delete(to_remove[-1])\n",
    "\n",
    "print('to_remove:', to_remove)\n",
    "    \n",
    "print('raw.annotations:', raw.annotations)\n",
    "print('raw.annotations.description:', raw.annotations.description)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "475eb933",
   "metadata": {},
   "source": [
    "## 获取marker、label、emotion"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "41e1ad0c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  72.787,  131.812,  172.009,  229.868,  274.653,  327.28 ,\n",
       "        359.531,  415.385,  466.211,  523.006,  583.335,  632.762,\n",
       "        664.963,  707.622,  743.043,  801.366,  832.122,  877.244,\n",
       "        910.627,  964.248, 1024.563, 1077.791, 1119.051, 1174.919,\n",
       "       1198.303, 1252.466, 1277.884, 1323.874, 1356.932, 1411.896,\n",
       "       1450.115, 1508.441, 1534.267, 1593.394, 1619.468, 1662.266,\n",
       "       1698.513, 1754.241, 1785.642, 1844.398, 1880.925, 1933.62 ,\n",
       "       1961.944, 2018.906, 2065.348, 2115.885, 2150.107, 2207.043,\n",
       "       2246.518, 2302.654, 2349.378, 2393.545, 2416.895, 2474.561,\n",
       "       2522.953, 2579.446, 2607.989, 2661.913, 2704.44 , 2761.144,\n",
       "       2789.92 , 2846.214, 2875.039, 2927.729, 2967.403, 3026.493,\n",
       "       3060.068, 3112.363, 3143.736, 3202.47 , 3245.121, 3304.586,\n",
       "       3341.784, 3396.644, 3456.951, 3516.142, 3553.937, 3608.5  ,\n",
       "       3643.942, 3699.641, 3723.394, 3770.916, 3804.944, 3861.84 ,\n",
       "       3897.708, 3951.596, 3972.603, 4030.527, 4059.811, 4112.243,\n",
       "       4144.854, 4201.35 , 4238.313, 4294.675, 4324.894, 4375.925])"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "raw.annotations.onset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "938a2ee9",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{72.787: '101',\n",
       " 131.812: '100',\n",
       " 172.009: '102',\n",
       " 229.868: '100',\n",
       " 274.653: '103',\n",
       " 327.28: '100',\n",
       " 359.531: '104',\n",
       " 415.385: '100',\n",
       " 466.211: '105',\n",
       " 523.006: '100',\n",
       " 583.335: '106',\n",
       " 632.762: '100',\n",
       " 664.963: '107',\n",
       " 707.622: '100',\n",
       " 743.043: '108',\n",
       " 801.366: '100',\n",
       " 832.122: '109',\n",
       " 877.244: '100',\n",
       " 910.627: '110',\n",
       " 964.248: '100',\n",
       " 1024.563: '111',\n",
       " 1077.791: '100',\n",
       " 1119.051: '112',\n",
       " 1174.919: '100',\n",
       " 1198.303: '113',\n",
       " 1252.466: '100',\n",
       " 1277.884: '114',\n",
       " 1323.874: '100',\n",
       " 1356.932: '115',\n",
       " 1411.896: '100',\n",
       " 1450.115: '116',\n",
       " 1508.441: '100',\n",
       " 1534.267: '117',\n",
       " 1593.394: '100',\n",
       " 1619.468: '118',\n",
       " 1662.266: '100',\n",
       " 1698.513: '119',\n",
       " 1754.241: '100',\n",
       " 1785.642: '120',\n",
       " 1844.398: '100',\n",
       " 1880.925: '121',\n",
       " 1933.62: '100',\n",
       " 1961.944: '122',\n",
       " 2018.906: '100',\n",
       " 2065.348: '123',\n",
       " 2115.885: '100',\n",
       " 2150.107: '124',\n",
       " 2207.043: '100',\n",
       " 2246.518: '125',\n",
       " 2302.654: '100',\n",
       " 2349.378: '126',\n",
       " 2393.545: '100',\n",
       " 2416.895: '127',\n",
       " 2474.561: '100',\n",
       " 2522.953: '128',\n",
       " 2579.446: '100',\n",
       " 2607.989: '129',\n",
       " 2661.913: '100',\n",
       " 2704.44: '130',\n",
       " 2761.144: '100',\n",
       " 2789.92: '131',\n",
       " 2846.214: '100',\n",
       " 2875.039: '132',\n",
       " 2927.729: '100',\n",
       " 2967.403: '133',\n",
       " 3026.493: '100',\n",
       " 3060.068: '134',\n",
       " 3112.363: '100',\n",
       " 3143.736: '135',\n",
       " 3202.47: '100',\n",
       " 3245.121: '136',\n",
       " 3304.586: '100',\n",
       " 3341.784: '137',\n",
       " 3396.644: '100',\n",
       " 3456.951: '138',\n",
       " 3516.142: '100',\n",
       " 3553.937: '139',\n",
       " 3608.5: '100',\n",
       " 3643.942: '140',\n",
       " 3699.641: '100',\n",
       " 3723.394: '141',\n",
       " 3770.916: '100',\n",
       " 3804.944: '142',\n",
       " 3861.84: '100',\n",
       " 3897.708: '143',\n",
       " 3951.596: '100',\n",
       " 3972.603: '144',\n",
       " 4030.527: '100',\n",
       " 4059.811: '145',\n",
       " 4112.243: '100',\n",
       " 4144.854: '146',\n",
       " 4201.35: '100',\n",
       " 4238.313: '147',\n",
       " 4294.675: '100',\n",
       " 4324.894: '148',\n",
       " 4375.925: '100'}"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "time_marker_dict = dict(zip(list(raw.annotations.onset), list(raw.annotations.description)))\n",
    "time_marker_dict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "a6ce99eb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4402200, 69)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_raw = raw.to_data_frame()\n",
    "df_raw.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "d026d0f1",
   "metadata": {},
   "outputs": [],
   "source": [
    "def assign_marker(time, time_marker_dict):\n",
    "    # 获取 time_marker_dict 的 keys，并进行排序\n",
    "    sorted_keys = sorted(time_marker_dict.keys())\n",
    "    \n",
    "    # 如果 time 小于所有的 key，返回 '100'\n",
    "    if time < sorted_keys[0]:\n",
    "        return '100'\n",
    "    \n",
    "    # 遍历 sorted_keys，找到 time 所在的区间\n",
    "    for i in range(len(sorted_keys) - 1):\n",
    "        if sorted_keys[i] <= time < sorted_keys[i + 1]:\n",
    "            return time_marker_dict[sorted_keys[i]]\n",
    "    \n",
    "    # 如果 time 大于最后一个键的值，返回最后一个键对应的 value\n",
    "    if time >= sorted_keys[-1]:\n",
    "        return time_marker_dict[sorted_keys[-1]]\n",
    "    \n",
    "    return None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "d18f9282",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_raw['marker'] = df_raw['time'].apply(lambda x: assign_marker(x, time_marker_dict))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "630f8904",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>time</th>\n",
       "      <th>FP1</th>\n",
       "      <th>FPZ</th>\n",
       "      <th>FP2</th>\n",
       "      <th>AF3</th>\n",
       "      <th>AF4</th>\n",
       "      <th>F7</th>\n",
       "      <th>F5</th>\n",
       "      <th>F3</th>\n",
       "      <th>F1</th>\n",
       "      <th>...</th>\n",
       "      <th>CB1</th>\n",
       "      <th>O1</th>\n",
       "      <th>OZ</th>\n",
       "      <th>O2</th>\n",
       "      <th>CB2</th>\n",
       "      <th>HEO</th>\n",
       "      <th>VEO</th>\n",
       "      <th>EKG</th>\n",
       "      <th>EMG</th>\n",
       "      <th>marker</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000</td>\n",
       "      <td>-20.573795</td>\n",
       "      <td>-65.021858</td>\n",
       "      <td>-12.615759</td>\n",
       "      <td>-11.734818</td>\n",
       "      <td>-22.098469</td>\n",
       "      <td>-11.075542</td>\n",
       "      <td>3.098398</td>\n",
       "      <td>-29.395409</td>\n",
       "      <td>-20.254015</td>\n",
       "      <td>...</td>\n",
       "      <td>48.351940</td>\n",
       "      <td>31.999506</td>\n",
       "      <td>24.326208</td>\n",
       "      <td>100.206940</td>\n",
       "      <td>46.288788</td>\n",
       "      <td>-92.562759</td>\n",
       "      <td>39.734264</td>\n",
       "      <td>-117.223351</td>\n",
       "      <td>-278.969330</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.001</td>\n",
       "      <td>-19.768562</td>\n",
       "      <td>-62.865662</td>\n",
       "      <td>-11.352083</td>\n",
       "      <td>-8.850757</td>\n",
       "      <td>-21.780554</td>\n",
       "      <td>-11.468485</td>\n",
       "      <td>4.612144</td>\n",
       "      <td>-27.813393</td>\n",
       "      <td>-19.147079</td>\n",
       "      <td>...</td>\n",
       "      <td>50.254257</td>\n",
       "      <td>33.781185</td>\n",
       "      <td>21.050146</td>\n",
       "      <td>90.189278</td>\n",
       "      <td>49.211575</td>\n",
       "      <td>-94.784645</td>\n",
       "      <td>39.116322</td>\n",
       "      <td>-112.158684</td>\n",
       "      <td>-219.964249</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.002</td>\n",
       "      <td>-20.264772</td>\n",
       "      <td>-63.195396</td>\n",
       "      <td>-11.446539</td>\n",
       "      <td>-6.734233</td>\n",
       "      <td>-22.029150</td>\n",
       "      <td>-15.892743</td>\n",
       "      <td>12.192110</td>\n",
       "      <td>-24.058764</td>\n",
       "      <td>-16.938055</td>\n",
       "      <td>...</td>\n",
       "      <td>51.935123</td>\n",
       "      <td>37.463692</td>\n",
       "      <td>25.281454</td>\n",
       "      <td>95.872017</td>\n",
       "      <td>52.384369</td>\n",
       "      <td>-96.675278</td>\n",
       "      <td>38.776707</td>\n",
       "      <td>-92.405327</td>\n",
       "      <td>-162.685883</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.003</td>\n",
       "      <td>-19.026922</td>\n",
       "      <td>-59.354393</td>\n",
       "      <td>-10.076377</td>\n",
       "      <td>-3.859205</td>\n",
       "      <td>-20.235567</td>\n",
       "      <td>-26.732752</td>\n",
       "      <td>19.848932</td>\n",
       "      <td>-19.528667</td>\n",
       "      <td>-13.934881</td>\n",
       "      <td>...</td>\n",
       "      <td>44.029369</td>\n",
       "      <td>32.905685</td>\n",
       "      <td>22.783703</td>\n",
       "      <td>93.144875</td>\n",
       "      <td>37.161251</td>\n",
       "      <td>-97.297379</td>\n",
       "      <td>38.338921</td>\n",
       "      <td>-65.733063</td>\n",
       "      <td>-109.939964</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.004</td>\n",
       "      <td>-16.873671</td>\n",
       "      <td>-57.726845</td>\n",
       "      <td>-9.777512</td>\n",
       "      <td>-3.023626</td>\n",
       "      <td>-19.745031</td>\n",
       "      <td>-37.965546</td>\n",
       "      <td>23.067003</td>\n",
       "      <td>-16.472864</td>\n",
       "      <td>-12.053852</td>\n",
       "      <td>...</td>\n",
       "      <td>35.366772</td>\n",
       "      <td>26.236935</td>\n",
       "      <td>16.199257</td>\n",
       "      <td>86.751114</td>\n",
       "      <td>20.673672</td>\n",
       "      <td>-96.759102</td>\n",
       "      <td>38.993130</td>\n",
       "      <td>-25.204615</td>\n",
       "      <td>-69.270409</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 70 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    time        FP1        FPZ        FP2        AF3        AF4         F7  \\\n",
       "0  0.000 -20.573795 -65.021858 -12.615759 -11.734818 -22.098469 -11.075542   \n",
       "1  0.001 -19.768562 -62.865662 -11.352083  -8.850757 -21.780554 -11.468485   \n",
       "2  0.002 -20.264772 -63.195396 -11.446539  -6.734233 -22.029150 -15.892743   \n",
       "3  0.003 -19.026922 -59.354393 -10.076377  -3.859205 -20.235567 -26.732752   \n",
       "4  0.004 -16.873671 -57.726845  -9.777512  -3.023626 -19.745031 -37.965546   \n",
       "\n",
       "          F5         F3         F1  ...        CB1         O1         OZ  \\\n",
       "0   3.098398 -29.395409 -20.254015  ...  48.351940  31.999506  24.326208   \n",
       "1   4.612144 -27.813393 -19.147079  ...  50.254257  33.781185  21.050146   \n",
       "2  12.192110 -24.058764 -16.938055  ...  51.935123  37.463692  25.281454   \n",
       "3  19.848932 -19.528667 -13.934881  ...  44.029369  32.905685  22.783703   \n",
       "4  23.067003 -16.472864 -12.053852  ...  35.366772  26.236935  16.199257   \n",
       "\n",
       "           O2        CB2        HEO        VEO         EKG         EMG  marker  \n",
       "0  100.206940  46.288788 -92.562759  39.734264 -117.223351 -278.969330     100  \n",
       "1   90.189278  49.211575 -94.784645  39.116322 -112.158684 -219.964249     100  \n",
       "2   95.872017  52.384369 -96.675278  38.776707  -92.405327 -162.685883     100  \n",
       "3   93.144875  37.161251 -97.297379  38.338921  -65.733063 -109.939964     100  \n",
       "4   86.751114  20.673672 -96.759102  38.993130  -25.204615  -69.270409     100  \n",
       "\n",
       "[5 rows x 70 columns]"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_raw.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "86378d6b",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_copy = df_raw"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "5bd79f55",
   "metadata": {},
   "outputs": [],
   "source": [
    "marker2label = {100: 0, 101: 1, 102: 2, 103: 3, 104: 4, 105: 5, 106: 6, 107: 7, 108: 8, 109: 1, 110: 2, 111: 3, 112: 2, 113: 4, 114: 5, 115: 6, 116: 7, 117: 8, 118: 1, 119: 2, 120: 3, 121: 4, 122: 5, 123: 3, 124: 6, 125: 7, 126: 8, 127: 1, 128: 2, 129: 3, 130: 4, 131: 5, 132: 6, 133: 7, 134: 4, 135: 8, 136: 1, 137: 2, 138: 3, 139: 4, 140: 5, 141: 6, 142: 7, 143: 8, 144: 5, 145: 6, 146: 7, 147: 8, 148: 1}\n",
    "label2emotion = {0: 'useless', 1: 'sad', 2: 'disgust', 3: 'happy', 4: 'fear', 5: 'nervous', 6: 'calm', 7: 'anger', 8: 'surprise'}\n",
    "\n",
    "# 定义一个函数，根据 marker 值查找对应的 label\n",
    "def marker_to_label(marker):\n",
    "    return marker2label.get(int(marker), None)  # 使用 get 方法，如果找不到对应的 marker，返回 None\n",
    "\n",
    "# 定义一个函数，根据 label 值查找对应的 emotion\n",
    "def label_to_emotion(label):\n",
    "    return label2emotion.get(label, None)  # 使用 get 方法，如果找不到对应的 label，返回 None\n",
    "\n",
    "# 使用 apply 函数将 marker_to_label 应用于 df_raw 的 'marker' 列，生成新的 'label' 列\n",
    "df_copy['label'] = df_copy['marker'].apply(marker_to_label)\n",
    "df_raw['label'] = df_raw['label'].astype(int)\n",
    "\n",
    "# 使用 apply 函数将 label_to_emotion 应用于 df_raw 的 'label' 列，生成新的 'emotion' 列\n",
    "df_copy['emotion'] = df_copy['label'].apply(label_to_emotion)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "c9b33755",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>time</th>\n",
       "      <th>FP1</th>\n",
       "      <th>FPZ</th>\n",
       "      <th>FP2</th>\n",
       "      <th>AF3</th>\n",
       "      <th>AF4</th>\n",
       "      <th>F7</th>\n",
       "      <th>F5</th>\n",
       "      <th>F3</th>\n",
       "      <th>F1</th>\n",
       "      <th>...</th>\n",
       "      <th>OZ</th>\n",
       "      <th>O2</th>\n",
       "      <th>CB2</th>\n",
       "      <th>HEO</th>\n",
       "      <th>VEO</th>\n",
       "      <th>EKG</th>\n",
       "      <th>EMG</th>\n",
       "      <th>marker</th>\n",
       "      <th>label</th>\n",
       "      <th>emotion</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000</td>\n",
       "      <td>-20.573795</td>\n",
       "      <td>-65.021858</td>\n",
       "      <td>-12.615759</td>\n",
       "      <td>-11.734818</td>\n",
       "      <td>-22.098469</td>\n",
       "      <td>-11.075542</td>\n",
       "      <td>3.098398</td>\n",
       "      <td>-29.395409</td>\n",
       "      <td>-20.254015</td>\n",
       "      <td>...</td>\n",
       "      <td>24.326208</td>\n",
       "      <td>100.206940</td>\n",
       "      <td>46.288788</td>\n",
       "      <td>-92.562759</td>\n",
       "      <td>39.734264</td>\n",
       "      <td>-117.223351</td>\n",
       "      <td>-278.969330</td>\n",
       "      <td>100</td>\n",
       "      <td>0</td>\n",
       "      <td>useless</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.001</td>\n",
       "      <td>-19.768562</td>\n",
       "      <td>-62.865662</td>\n",
       "      <td>-11.352083</td>\n",
       "      <td>-8.850757</td>\n",
       "      <td>-21.780554</td>\n",
       "      <td>-11.468485</td>\n",
       "      <td>4.612144</td>\n",
       "      <td>-27.813393</td>\n",
       "      <td>-19.147079</td>\n",
       "      <td>...</td>\n",
       "      <td>21.050146</td>\n",
       "      <td>90.189278</td>\n",
       "      <td>49.211575</td>\n",
       "      <td>-94.784645</td>\n",
       "      <td>39.116322</td>\n",
       "      <td>-112.158684</td>\n",
       "      <td>-219.964249</td>\n",
       "      <td>100</td>\n",
       "      <td>0</td>\n",
       "      <td>useless</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.002</td>\n",
       "      <td>-20.264772</td>\n",
       "      <td>-63.195396</td>\n",
       "      <td>-11.446539</td>\n",
       "      <td>-6.734233</td>\n",
       "      <td>-22.029150</td>\n",
       "      <td>-15.892743</td>\n",
       "      <td>12.192110</td>\n",
       "      <td>-24.058764</td>\n",
       "      <td>-16.938055</td>\n",
       "      <td>...</td>\n",
       "      <td>25.281454</td>\n",
       "      <td>95.872017</td>\n",
       "      <td>52.384369</td>\n",
       "      <td>-96.675278</td>\n",
       "      <td>38.776707</td>\n",
       "      <td>-92.405327</td>\n",
       "      <td>-162.685883</td>\n",
       "      <td>100</td>\n",
       "      <td>0</td>\n",
       "      <td>useless</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.003</td>\n",
       "      <td>-19.026922</td>\n",
       "      <td>-59.354393</td>\n",
       "      <td>-10.076377</td>\n",
       "      <td>-3.859205</td>\n",
       "      <td>-20.235567</td>\n",
       "      <td>-26.732752</td>\n",
       "      <td>19.848932</td>\n",
       "      <td>-19.528667</td>\n",
       "      <td>-13.934881</td>\n",
       "      <td>...</td>\n",
       "      <td>22.783703</td>\n",
       "      <td>93.144875</td>\n",
       "      <td>37.161251</td>\n",
       "      <td>-97.297379</td>\n",
       "      <td>38.338921</td>\n",
       "      <td>-65.733063</td>\n",
       "      <td>-109.939964</td>\n",
       "      <td>100</td>\n",
       "      <td>0</td>\n",
       "      <td>useless</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.004</td>\n",
       "      <td>-16.873671</td>\n",
       "      <td>-57.726845</td>\n",
       "      <td>-9.777512</td>\n",
       "      <td>-3.023626</td>\n",
       "      <td>-19.745031</td>\n",
       "      <td>-37.965546</td>\n",
       "      <td>23.067003</td>\n",
       "      <td>-16.472864</td>\n",
       "      <td>-12.053852</td>\n",
       "      <td>...</td>\n",
       "      <td>16.199257</td>\n",
       "      <td>86.751114</td>\n",
       "      <td>20.673672</td>\n",
       "      <td>-96.759102</td>\n",
       "      <td>38.993130</td>\n",
       "      <td>-25.204615</td>\n",
       "      <td>-69.270409</td>\n",
       "      <td>100</td>\n",
       "      <td>0</td>\n",
       "      <td>useless</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 72 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    time        FP1        FPZ        FP2        AF3        AF4         F7  \\\n",
       "0  0.000 -20.573795 -65.021858 -12.615759 -11.734818 -22.098469 -11.075542   \n",
       "1  0.001 -19.768562 -62.865662 -11.352083  -8.850757 -21.780554 -11.468485   \n",
       "2  0.002 -20.264772 -63.195396 -11.446539  -6.734233 -22.029150 -15.892743   \n",
       "3  0.003 -19.026922 -59.354393 -10.076377  -3.859205 -20.235567 -26.732752   \n",
       "4  0.004 -16.873671 -57.726845  -9.777512  -3.023626 -19.745031 -37.965546   \n",
       "\n",
       "          F5         F3         F1  ...         OZ          O2        CB2  \\\n",
       "0   3.098398 -29.395409 -20.254015  ...  24.326208  100.206940  46.288788   \n",
       "1   4.612144 -27.813393 -19.147079  ...  21.050146   90.189278  49.211575   \n",
       "2  12.192110 -24.058764 -16.938055  ...  25.281454   95.872017  52.384369   \n",
       "3  19.848932 -19.528667 -13.934881  ...  22.783703   93.144875  37.161251   \n",
       "4  23.067003 -16.472864 -12.053852  ...  16.199257   86.751114  20.673672   \n",
       "\n",
       "         HEO        VEO         EKG         EMG  marker  label  emotion  \n",
       "0 -92.562759  39.734264 -117.223351 -278.969330     100      0  useless  \n",
       "1 -94.784645  39.116322 -112.158684 -219.964249     100      0  useless  \n",
       "2 -96.675278  38.776707  -92.405327 -162.685883     100      0  useless  \n",
       "3 -97.297379  38.338921  -65.733063 -109.939964     100      0  useless  \n",
       "4 -96.759102  38.993130  -25.204615  -69.270409     100      0  useless  \n",
       "\n",
       "[5 rows x 72 columns]"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_copy.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "c491b03f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(54964, 72)"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_marker = df_copy[df_copy['marker']=='115']\n",
    "df_marker.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bbbf7941",
   "metadata": {},
   "source": [
    "# 绘制波形图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "29fc4acd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAKyCAYAAADIG729AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hUVfoH8O/09IQktJBA6EgvgqCiYMGCrrr+sK11Xdvqrq6u67L2ir33BlYUC1hQEJHee28BQhJCem9T7++PyUzOndw7JZmS8v08j48kmczczNx77nnPec97NJIkSSAiIiIiIiKioNNG+gCIiIiIiIiIOioG3UREREREREQhwqCbiIiIiIiIKEQYdBMRERERERGFCINuIiIiIiIiohBh0E1EREREREQUIgy6iYiIiIiIiEKEQTcRERERERFRiDDoJiIiIiIiIgoRBt1EREREREREIdKhgu6VK1fi4osvRlpaGjQaDRYsWBDQ7y9fvhyXXHIJevbsidjYWIwePRpffPGF7DF79uzB5ZdfjszMTGg0Grz66qten/PZZ5+FRqPBPffcE9gfQ0RERERERO1ehwq6a2trMWrUKLz11lst+v21a9di5MiR+O6777Bz507cdNNNuP766/Hzzz+7H1NXV4d+/frh2WefRY8ePbw+36ZNm/Dee+9h5MiRLToeIiIiIiIiat80kiRJkT6IUNBoNJg/fz4uvfRS9/fMZjMefPBBzJ07FxUVFRg+fDiee+45TJkyRfV5pk+fju7du+Pjjz9u9rPMzEzcc889irPYNTU1GDt2LN5++2089dRTGD16tM9ZcSIiIiIiIupYOtRMty933XUX1q1bh6+++go7d+7EjBkzcP755+PQoUOqv1NZWYnk5OSAX+vOO+/E9OnTcc4557TmkImIiIiIiKgd00f6AMIlJycHs2fPRk5ODtLS0gAA//73v7Fo0SLMnj0bzzzzTLPfmTdvnjtFPBBfffUVtm7dik2bNgXl2ImIiIiIiKh96jRB965du2C32zFo0CDZ981mM1JSUpo9ftmyZbjpppvwwQcfYNiwYX6/Tm5uLu6++24sWbIEUVFRrT5uIiIiIiIiar86TdBdU1MDnU6HLVu2QKfTyX4WFxcn+3rFihW4+OKL8corr+D6668P6HW2bNmCoqIijB071v09u92OlStX4s0334TZbG72+kRERERERNQxdZqge8yYMbDb7SgqKsLkyZNVH7d8+XJcdNFFeO6553DrrbcG/Dpnn302du3aJfveTTfdhCFDhuCBBx5gwE1ERERERNSJdKigu6amBllZWe6vjx49iu3btyM5ORmDBg3CX/7yF1x//fV46aWXMGbMGBQXF2Pp0qUYOXIkpk+fjmXLluGiiy7C3XffjcsvvxwFBQUAAKPR6C6mZrFYsHfvXve/jx8/ju3btyMuLg4DBgxAfHw8hg8fLjuu2NhYpKSkNPs+ERERERERdWwdasuw5cuXY+rUqc2+f8MNN2DOnDmwWq146qmn8Omnn+L48eNITU3FxIkT8fjjj2PEiBG48cYb8cknnzT7/TPPPBPLly8HAGRnZ6Nv375eH+NpypQp3DKMiIiIiIioE+pQQTcRERERERFRW9Kp9ukmIiIiIiIiCicG3UREREREREQh0u4LqTkcDuTn5yM+Ph4ajSbSh0NERERERESdgCRJqK6uRlpaGrRa9fnsNhV0P/vss5g5cybuvvtuv4uO5efnIyMjI7QHRkRERERERKQgNzcX6enpqj9vM0H3pk2b8N5772HkyJEB/V58fDwA5x+akJAQikMjIiIiIiIikqmqqkJGRoY7JlXTJoLumpoa/OUvf8EHH3yAp556KqDfdaWUJyQkMOgmIiIiIiKisPK1zLlNFFK78847MX36dJxzzjk+H2s2m1FVVSX7rz1YfagE8zbnIq+8LtKHQkRERERERGES8aD7q6++wtatWzFr1iy/Hj9r1iwkJia6/2sv67lfW3oQ//l2J3blVUb6UIiIiIiIiChMIhp05+bm4u6778YXX3yBqKgov35n5syZqKysdP+Xm5sb4qMMjhijM5O/zmKP8JEQERERERFRuER0TfeWLVtQVFSEsWPHur9nt9uxcuVKvPnmmzCbzdDpdLLfMZlMMJlM4T7UVosxOv+OOostwkdCRERERERE4RLRoPvss8/Grl27ZN+76aabMGTIEDzwwAPNAu72LNoddHOmm4iIiIiIqLOIaNAdHx+P4cOHy74XGxuLlJSUZt9v72IYdBMREREREXU6ES+k1lnEutd0M72ciIiIiIios2gT+3SLli9fHulDCAmmlxMREREREXU+nOkOE1d6eT2DbiIiIiIiok6DQXeYRHPLMCIiIiIiok6HQXeYxDbOdNdyTTcREREREVGnwaA7TJheTkRERERE1Pkw6A4TppcTERERERF1Pgy6wyTWXb2c6eVERERERESdBYPuMOGWYURERERERJ0Pg+4wiWlML+eabiIiIiIios6DQXeYuAqp1VntkCQpwkdDRERERERE4cCgO0xcQbfdIcFsc0T4aIiIiIiIiCgcGHSHiSu9HGCKORERERERUWfBoDtMdFoNjHrn211nZdBNRERERETUGTDoDiP3um4ztw0jIiIiIiLqDBh0h1FsY4o5tw0jIiIiIiLqHBh0hxH36iYiIiIiIupcGHSHkTu93ML0ciIiIiIios6AQXcYxXCmm4iIiIiIqFNh0B1Grm3DuGUYERERERFR58CgO4yimV5ORERERETUqTDoDqMYgzPoruVMNxERERERUafAoDuMYk1MLyciIiIiIupMGHSHEbcMIyIiIiIi6lwYdIeRK72ca7qJiIiIiIg6BwbdYcSZbiIiIiIios6FQXcYudZ0M+gmIiIiIiLqHBh0h1FM40x3vZXp5URERERERJ0Bg+4winZtGWbmTDcREREREVFnwKA7jGKM3DKMiIiIiIioM2HQHUYxpsZCakwvJyIiIiIi6hQiHnTPmjUL48ePR3x8PLp164ZLL70UBw4ciPRhhYRrTXcd08uJiIiIiIg6hYgH3StWrMCdd96J9evXY8mSJbBarZg2bRpqa2sjfWhBF2Ng9XIiIiIiIqLORB/pA1i0aJHs6zlz5qBbt27YsmULzjjjjAgdVWi40svrrXY4HBK0Wk2Ej4iIiIiIiIhCKeIz3Z4qKysBAMnJyRE+kuBzpZcDQIONs91EREREREQdXcRnukUOhwP33HMPTjvtNAwfPlzxMWazGWaz2f11VVVVuA6v1aL0TUF3rdnurmZOREREREREHVObmum+8847sXv3bnz11Veqj5k1axYSExPd/2VkZITxCFtHq9W49+rmtmFEREREREQdX5sJuu+66y78/PPPWLZsGdLT01UfN3PmTFRWVrr/y83NDeNRtl4stw0jIiIiIiLqNCKe3yxJEv7xj39g/vz5WL58Ofr27ev18SaTCSaTKUxHF3zRjeu6a7ltGBERERERUYcX8aD7zjvvxJdffokffvgB8fHxKCgoAAAkJiYiOjo6wkcXfK5tw5heTkRERERE1PFFPL38nXfeQWVlJaZMmYKePXu6//v6668jfWgh4ZrprrMwvZyIiIiIiKiji/hMtyRJkT6EsIoV9uomIiIiIiKiji3iM92dTXRjejnXdBMREREREXV8DLrDLIbp5URERERERJ0Gg+4wcwXdLKRGRERERETU8THoDrMYY2N6OYNuIiIiIiKiDo9Bd5g1zXQzvZyIiIiIiKijY9AdZk1bhnGmm4iIiIiIqKNj0B1msa6gm1uGERERERERdXgMusPMtaa7zsz0ciIiIiIioo6OQXeYMb2ciIiIiIio82DQHWbuQmpMLyciIiIiIurwGHSHWazJmV5e08D0ciIiIiIioo6OQXeYJUQZAABVDLqJiIiIiIg6PAbdYZYQ7ZzprmqwRvhIiIiIiIiIKNQYdIdZQrRzpttic6CB67qJiIiIiIg6NAbdYRZn1EOjcf6bs91EREREREQdG4PuMNNqNU3ruusZdBMREREREXVkDLojwLWuu7KexdSIiIiIiIg6MgbdEdBUwZwz3URERERERB0Zg+4IYHo5ERERERFR58CgOwISo7lXNxERERERUWfAoDsC3Ht1c6abiIiIiIioQ2PQHQFMLyciIiIiIuocGHRHQEI0C6kRERERERF1Bgy6IyAhyrVlGINuIiIiIiKijoxBdwR0iTUCAMpqLRE+EiIiIiIiIgolBt0RkBpnAgCU1jDoJiIiIiIi6sgYdEeAO+jmTDcREREREVGHxqA7AlLinOnl5XUW2OyOCB8NERERERERhQqD7gjoEmOEVgNIElBWx9luIiIiIiKijopBdwTotBokNxZT47puIiIiIiKijqtNBN1vvfUWMjMzERUVhVNOOQUbN26M9CGFXEqsc113SY05wkdCREREREREoRLxoPvrr7/Gvffei0cffRRbt27FqFGjcN5556GoqCjShxZSqfGc6SYiIiIiIuroIh50v/zyy7jllltw0003YejQoXj33XcRExODjz/+ONKHFlKuCuZF1Q0+H1tjtmFbTjk2Z5cht6yOxdeIiIiIiIjaCX0kX9xisWDLli2YOXOm+3tarRbnnHMO1q1bF8EjC720pGgAwPHyetXHlNVa8PTCffhh+3HYHJL7+3qtBuldotE7JRaZKTHoEmNElEEHo17rLtDmerQkSbLndP5Mcv8bcD626d/ynyk9BxERERERUShlJMfgktG9In0YQRHRoLukpAR2ux3du3eXfb979+7Yv3+/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AwC+++47pKenY8CAARE+MupoeK5RKLz88suYO3culixZIlt3O2PGDLz77rsAgE2bNuH48eM488wzI3SU1J5VVFQgPz/f/fWCBQuQkpLCNo2C6o477sCJEyeQnZ2N7OxsTJw4Ee+//z7uuOMOtmcUNLW1taioqHB/PXfuXIwZM4btWSenkSRJivRBdAYHDhzAjTfeiNLSUiQkJGD27NkYMWJEpA+L2rHbbrsNCxcuREFBAVJSUhAfH4+srCyeaxRUeXl5yMjIQL9+/RAfHw8AMJlM2LBhAwoLC3Hdddfh6NGjMBqNePPNNzF16tQIHzG1R8eOHcOMGTNQX18PrVaLrl274sUXX8To0aPZplHITJkyBffccw8uvfRStmcUNEeOHMHll18Ou90OSZLQr18/vPbaa8jMzGR71okx6CYiIiIiIiIKEaaXExEREREREYUIg24iIiIiIiKiEGHQTURERERERBQiDLqJiIiIiIiIQoRBNxEREREREVGIMOgmIiIiIiIiChEG3UREREREREQhwqCbiIiIiIiIKEQYdBMRERERERGFCINuIiIiIiIiohBh0E1EREREREQUIgy6iYiIiIiIiEKEQTcRERERERFRiDDoJiIiIiIiIgoRBt1EREREREREIaKP9AG0lsPhQH5+PuLj46HRaCJ9OERERERERNQJSJKE6upqpKWlQatVn89u90F3fn4+MjIyIn0YRERERERE1Anl5uYiPT1d9eftPuiOj48H4PxDExISInw0RERERERE1BlUVVUhIyPDHZOqafdBtyulPCEhgUE3ERERERERhZWvZc4spEZERJ3OsdJarD9SGunDICIiok6AQTcREXU6Z7+0Ale9vx678iojfShERETUwTHoJiKiTsfmkAAAu44z6CYiIqLQYtBNRESdlgQp0odAREREHVxIg+6VK1fi4osvRlpaGjQaDRYsWCD7uSRJeOSRR9CzZ09ER0fjnHPOwaFDh0J5SERE1MlJUlOgbbMz6CYiIqLQCmnQXVtbi1GjRuGtt95S/Pnzzz+P119/He+++y42bNiA2NhYnHfeeWhoaAjlYRERUSfmkMR/M+gmIiKi0ArplmEXXHABLrjgAsWfSZKEV199FQ899BAuueQSAMCnn36K7t27Y8GCBbjqqqtCeWhERNRJ2RyOSB8CERERdSIRW9N99OhRFBQU4Jxz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\n",
      "text/plain": [
       "<Figure size 1000x700 with 5 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.signal import butter, filtfilt\n",
    "\n",
    "# 创建带通滤波器\n",
    "def butter_bandpass(lowcut, highcut, fs, order=4):\n",
    "    nyq = 0.5 * fs  # 奈奎斯特频率\n",
    "    low = lowcut / nyq  # 归一化低频\n",
    "    high = highcut / nyq  # 归一化高频\n",
    "    b, a = butter(order, [low, high], btype='band')\n",
    "    return b, a\n",
    "\n",
    "# 滤波函数\n",
    "def bandpass_filter(data, lowcut, highcut, fs, order=4):\n",
    "    b, a = butter_bandpass(lowcut, highcut, fs, order=order)\n",
    "    y = filtfilt(b, a, data)\n",
    "    return y\n",
    "\n",
    "# 定义脑电频带\n",
    "bands = {\n",
    "    'Delta (0.5–4 Hz)': (0.5, 4),\n",
    "    'Theta (4–8 Hz)': (4, 8),\n",
    "    'Alpha (8–13 Hz)': (8, 13),\n",
    "    'Beta (13–30 Hz)': (13, 30),\n",
    "    'Gamma (30–100 Hz)': (30, 100)\n",
    "}\n",
    "\n",
    "# 假设 df_marker 是存储脑电数据的 DataFrame，FP1 是其中一列\n",
    "fs = 1000\n",
    "time = np.linspace(0, len(df_marker)/fs, len(df_marker))  # 时间轴\n",
    "\n",
    "fp1_data = df_marker['F1']  # 获取FP1导联数据\n",
    "\n",
    "# 绘制每个频带的波形图\n",
    "plt.figure(figsize=(10, 7))\n",
    "\n",
    "for i, (band, (lowcut, highcut)) in enumerate(bands.items()):\n",
    "    filtered_data = bandpass_filter(fp1_data, lowcut, highcut, fs)\n",
    "    \n",
    "    plt.subplot(len(bands), 1, i+1)\n",
    "    plt.plot(time, filtered_data)\n",
    "#     plt.title(f'FP1 - {band} Band')\n",
    "#     plt.ylabel('Amplitude (uV)')\n",
    "#     plt.xlabel('Time (s)')\n",
    "    plt.xticks(fontsize=8) \n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2a3d9d4d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "e4eeb901",
   "metadata": {},
   "source": [
    "# 计算PSD"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6f517c23",
   "metadata": {},
   "source": [
    "- 被试'zhangbuyuan_20230801'的原始脑电数据，147、148两个session数据缺失"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "afce691e",
   "metadata": {},
   "source": [
    "## 计算峰值帧附近的PSD\n",
    "- 输入1min的脑电df，时间点time_point，窗口大小win，频带frequency_band，返回对应的PSD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "d3218d72",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 得到的df_1min无label和emotion\n",
    "def get_df_1min(selected_subject, marker):\n",
    "    eeg_path = 'eeg_py\\eeg_for_mne'\n",
    "    selected_file = selected_subject + '.set'\n",
    "    \n",
    "    # 加载数据\n",
    "    raw = mne.io.read_raw_eeglab(os.path.join(eeg_path, selected_file), \n",
    "        eog=(), \n",
    "        preload=False, \n",
    "        uint16_codec=None, \n",
    "        montage_units='auto', \n",
    "        verbose=None\n",
    "    )\n",
    "\n",
    "    # 删除异常值\n",
    "    markers_all = list(raw.annotations.description)\n",
    "    markers_retain = [str(marker) for marker in list(range(99, 149))] # 100~148\n",
    "    markers_del = list(set([item for item in markers_all if item not in markers_retain]))\n",
    "\n",
    "    to_remove = []\n",
    "    for m in markers_del:\n",
    "        to_remove.append(list(raw.annotations.description).index(m))\n",
    "        raw.annotations.delete(to_remove[-1])\n",
    "\n",
    "    # 转为dataframe\n",
    "    df_raw = raw.to_data_frame()\n",
    "    time_marker_dict = dict(zip(list(raw.annotations.onset), list(raw.annotations.description)))\n",
    "    \n",
    "    # 根据marker筛选数据\n",
    "    df_raw.loc[:, 'marker'] = df_raw['time'].apply(lambda x: assign_marker(x, time_marker_dict))\n",
    "    df_1min = df_raw[df_raw['marker']==marker]\n",
    "    \n",
    "    return df_1min"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "289b0897",
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_label_emotion(df_1min):\n",
    "    marker2label = {100: 0, 101: 1, 102: 2, 103: 3, 104: 4, 105: 5, 106: 6, 107: 7, 108: 8, 109: 1, 110: 2, 111: 3, 112: 2, 113: 4, 114: 5, 115: 6, 116: 7, 117: 8, 118: 1, 119: 2, 120: 3, 121: 4, 122: 5, 123: 3, 124: 6, 125: 7, 126: 8, 127: 1, 128: 2, 129: 3, 130: 4, 131: 5, 132: 6, 133: 7, 134: 4, 135: 8, 136: 1, 137: 2, 138: 3, 139: 4, 140: 5, 141: 6, 142: 7, 143: 8, 144: 5, 145: 6, 146: 7, 147: 8, 148: 1}\n",
    "    label2emotion = {0: 'useless', 1: 'sad', 2: 'disgust', 3: 'happy', 4: 'fear', 5: 'nervous', 6: 'calm', 7: 'anger', 8: 'surprise'}\n",
    "\n",
    "    # 定义一个函数，根据 marker 值查找对应的 label\n",
    "    def marker_to_label(marker):\n",
    "        return marker2label.get(int(marker), None)  # 使用 get 方法，如果找不到对应的 marker，返回 None\n",
    "\n",
    "    # 定义一个函数，根据 label 值查找对应的 emotion\n",
    "    def label_to_emotion(label):\n",
    "        return label2emotion.get(label, None)  # 使用 get 方法，如果找不到对应的 label，返回 None\n",
    "\n",
    "    # 使用 apply 函数将 marker_to_label 应用于 df_raw 的 'marker' 列，生成新的 'label' 列\n",
    "    df_1min.loc[:, 'label'] = df_1min['marker'].apply(marker_to_label)\n",
    "    df_1min.loc[:, 'label'] = df_1min['label'].astype(int)\n",
    "\n",
    "    # 使用 apply 函数将 label_to_emotion 应用于 df_raw 的 'label' 列，生成新的 'emotion' 列\n",
    "    df_1min.loc[:, 'emotion'] = df_1min['label'].apply(label_to_emotion)\n",
    "    \n",
    "    return df_1min"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "91b15e23",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_psd(df_1min, time_point, win, frequency_band):\n",
    "    frequency_bands = {'delta': (1, 4), 'theta': (4, 8), 'alpha': (8, 12), 'beta': (12, 25), 'gamma': (25, 40), 'all': (1, 40)}\n",
    "    f_min, f_max = frequency_bands.get(frequency_band, (None, None))\n",
    "    \n",
    "    if time_point - win >= 0 and time_point + win <= df_1min.shape[0]/1000:\n",
    "        t1 = time_point - win\n",
    "        t2 = time_point + win\n",
    "        print('df_1min.iloc[int(t1*1000): int(t2*1000), 1: -8].shape:', df_1min.iloc[int(t1*1000): int(t2*1000), 1: -8].shape)\n",
    "        df_eeg_select = df_1min.iloc[int(t1*1000): int(t2*1000), 1: -8].to_numpy()\n",
    "        f, psd_den = signal.periodogram(df_eeg_select, fs=1000, window=\"boxcar\", nfft=512, scaling=\"density\", \n",
    "                                        return_onesided=False, axis=0)\n",
    "\n",
    "        idx = np.where((f >= f_min) & (f <= f_max))[0]\n",
    "        print('idx:', idx)\n",
    "        \n",
    "        psd_band = np.mean(psd_den[idx,:],axis=0)\n",
    "        print(\"t1~t2之间的数据形状：\", df_eeg_select.shape)\n",
    "        print(f\"t1~t2之间的时长：{df_eeg_select.shape[0] / 1000} s\")  \n",
    "        \n",
    "        return psd_band"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "742d14fe",
   "metadata": {},
   "outputs": [],
   "source": [
    "def assign_marker(time, time_marker_dict):\n",
    "    # 获取 time_marker_dict 的 keys，并进行排序\n",
    "    sorted_keys = sorted(time_marker_dict.keys())\n",
    "    \n",
    "    # 如果 time 小于所有的 key，返回 '100'\n",
    "    if time < sorted_keys[0]:\n",
    "        return '100'\n",
    "    \n",
    "    # 遍历 sorted_keys，找到 time 所在的区间\n",
    "    for i in range(len(sorted_keys) - 1):\n",
    "        if sorted_keys[i] <= time < sorted_keys[i + 1]:\n",
    "            return time_marker_dict[sorted_keys[i]]\n",
    "    \n",
    "    # 如果 time 大于最后一个键的值，返回最后一个键对应的 value\n",
    "    if time >= sorted_keys[-1]:\n",
    "        return time_marker_dict[sorted_keys[-1]]\n",
    "    \n",
    "    return None\n",
    "\n",
    "def find_value(dict_, partial_key):\n",
    "    for key in dict_:\n",
    "        if partial_key in key:\n",
    "            return dict_[key]\n",
    "    return None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "2bcbecd8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\yangmi_20230728.fdt\n",
      "df_1min.iloc[int(t1*1000): int(t2*1000), 1: -8].shape: (2000, 64)\n",
      "idx: [3 4]\n",
      "t1~t2之间的数据形状： (2000, 63)\n",
      "t1~t2之间的时长：2.0 s\n",
      "len(psd_band): 63\n",
      "psd_band: [3.19775931467772, 5.339820852596761, 4.226723042446258, 2.6979116950896835, 3.145294943577387, 10.092512722542766, 5.287775805229541, 2.6700888777724625, 2.0210428311950133, 3.790982926580056, 3.2221090822867913, 4.0144777002388174, 4.270742356534241, 6.590628095928186, 7.492244487005313, 3.511439716148526, 1.1236302453623457, 1.0198111635294413, 1.893149934743809, 1.7004959611396175, 2.0982388672263204, 3.523032082655659, 2.7010124831418647, 4.848083565371168, 2.1812466877652352, 0.4782727702681954, 0.09617920650141443, 0.34051708012672843, 0.7709585320380326, 0.6596985079173969, 1.098821339683381, 3.725919591029774, 7.687157905423536, 2.287951670346376, 0.7181070657572113, 0.09574029126482958, 0.145691356357204, 0.006172887541283744, 0.012080619829823336, 0.4453587786208434, 0.7879014556048003, 2.285137984211361, 3.2907505917643274, 1.9863300470523457, 0.7965043356398469, 0.6613872700796384, 1.5660656329945009, 0.5284970711312532, 0.5168973801458481, 1.1624487454969992, 0.9585166631536007, 1.4842806608197945, 1.2603897047310704, 1.2901095495841863, 0.6666935314016841, 0.4945308823118684, 1.2541895992352308, 2.3720238796425686, 3.0430273368376732, 1.8517298548746812, 2.074527395895334, 2.6288294916527137, 2.448467823861795]\n"
     ]
    }
   ],
   "source": [
    "selected_subject = 'yangmi_20230728'\n",
    "marker = '146'\n",
    "\n",
    "# 获取对应的apex\n",
    "apex_list = find_value(subject_apextime_micro_dict, marker + '_' + selected_subject)\n",
    "\n",
    "# 根据subject和marker筛选出对应的1min EEG数据\n",
    "df_1min = get_df_1min(selected_subject, marker)\n",
    "    \n",
    "# 给筛选的数据增加 label 和 emotion\n",
    "df_1min = add_label_emotion(df_1min)\n",
    "\n",
    "# 给定1min EEG数据，apex的时刻，时间窗口，频带，返回对应的psd\n",
    "psd_band = get_psd(df_1min, apex_list[0], 1, 'theta')\n",
    "psd_band = psd_band.tolist()\n",
    "print('len(psd_band):',len(psd_band))\n",
    "print('psd_band:', psd_band)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "12d8e909",
   "metadata": {},
   "source": [
    "## 计算40s的PSD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "13f08a1c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "filenames_set: ['fengdengfang_20230802.set', 'linjiaying_20230719.set', 'liyan_20230802.set', 'lizhuoru_20230720.set', 'lvpinxin_20230803.set', 'mayiran_20230718.set', 'wangjintao_20230719.set', 'wangshuai_20230802.set', 'wangsixian_20230719.set', 'wangxiaomin_20230718.set', 'wangziheng_20230727.set', 'wangzishan_20230717.set', 'xietao_20230803.set', 'yangmi_20230728.set', 'yansen_20230731.set', 'yuelu_20230720.set', 'zhangbuyuan_20230801.set', 'zhangdi_20230721.set', 'zhaolei_20230803.set', 'zhaoshaohua_20230801.set', 'zhengwansheng_20230718.set']\n",
      "len(filenames_set): 21\n"
     ]
    }
   ],
   "source": [
    "eeg_path = 'eeg_py\\eeg_for_mne'\n",
    "\n",
    "for dirpath, dirnames, filenames in os.walk(eeg_path):\n",
    "    filenames_set = [s for s in filenames if '.set' in s]\n",
    "    print('filenames_set:', filenames_set)\n",
    "    print('len(filenames_set):', len(filenames_set))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "08362e1f",
   "metadata": {},
   "outputs": [],
   "source": [
    "def find_value(dict_, partial_key):\n",
    "    for key in dict_:\n",
    "        if partial_key in key:\n",
    "            return dict_[key]\n",
    "    return None\n",
    "\n",
    "def assign_marker(time, time_marker_dict):\n",
    "    # 获取 time_marker_dict 的 keys，并进行排序\n",
    "    sorted_keys = sorted(time_marker_dict.keys())\n",
    "    \n",
    "    # 如果 time 小于所有的 key，返回 '100'\n",
    "    if time < sorted_keys[0]:\n",
    "        return '100'\n",
    "    \n",
    "    # 遍历 sorted_keys，找到 time 所在的区间\n",
    "    for i in range(len(sorted_keys) - 1):\n",
    "        if sorted_keys[i] <= time < sorted_keys[i + 1]:\n",
    "            return time_marker_dict[sorted_keys[i]]\n",
    "    \n",
    "    # 如果 time 大于最后一个键的值，返回最后一个键对应的 value\n",
    "    if time >= sorted_keys[-1]:\n",
    "        return time_marker_dict[sorted_keys[-1]]\n",
    "    \n",
    "    return None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "a603e788",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_psd_by_window(df_1min, window=1):\n",
    "    frequency_bands = {'delta': (1, 4), 'theta': (4, 8), 'alpha': (8, 13), 'beta': (13, 30), 'gamma': (30, 47)}\n",
    "    \n",
    "    df_eeg_select = df_1min.iloc[-40 * 1000: -1, 1: -7].to_numpy()\n",
    "    \n",
    "    rslt = np.zeros([1, 40// window, 310])\n",
    "    \n",
    "    for i in range(40 // window):\n",
    "        one_secs = df_eeg_select[i*window*1000:(i+1)*window*1000+1, :]\n",
    "        temp_rslt = np.zeros([62, 5])\n",
    "        for bi, band in enumerate(frequency_bands.values()):\n",
    "            (f_min, f_max) = band\n",
    "            f, psd_den = signal.periodogram(one_secs, fs=1000, window=\"boxcar\", nfft=512, scaling=\"density\", \n",
    "                                            return_onesided=False, axis=0)\n",
    "            \n",
    "            idx = np.where((f >= f_min) & (f <= f_max))[0]\n",
    "            psd_band = np.mean(psd_den[idx,:],axis=0)\n",
    "            temp_rslt[:, bi] = psd_band\n",
    "        \n",
    "        rslt[0, i, :] = temp_rslt.flatten()\n",
    "        \n",
    "    # 计算非空值的均值\n",
    "    non_zero_mean = np.nanmean(rslt)\n",
    "\n",
    "    # 使用非空值的均值填充空值\n",
    "    rslt[np.isnan(rslt)] = non_zero_mean\n",
    "\n",
    "    has_nan = np.isnan(rslt).any()\n",
    "    print(\"rslt中是否有空值：\", has_nan)\n",
    "    if has_nan:\n",
    "        print('***************************************************************************************************')\n",
    "    \n",
    "    return rslt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "91ae1ae0",
   "metadata": {},
   "source": [
    "### 保存单个.pkl文件\n",
    "- 将每个.set文件的psd特征以字典的形式保存到单个.pkl文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "cc77f10a",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:   0%|                                                                         | 0/21 [00:00<?, ?it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "selected_subject: fengdengfang_20230802\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\fengdengfang_20230802.fdt\n",
      "Reading 0 ... 4402199  =      0.000 ...  4402.199 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.8s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:   5%|███                                                              | 1/21 [01:18<26:12, 78.64s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: fengdengfang_20230802_148\n",
      "Process file fengdengfang_20230802.set success!\n",
      "selected_subject: linjiaying_20230719\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\linjiaying_20230719.fdt\n",
      "Reading 0 ... 3968999  =      0.000 ...  3968.999 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.4s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  10%|██████▏                                                          | 2/21 [02:37<24:53, 78.63s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: linjiaying_20230719_148\n",
      "Process file linjiaying_20230719.set success!\n",
      "selected_subject: liyan_20230802\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\liyan_20230802.fdt\n",
      "Reading 0 ... 4444199  =      0.000 ...  4444.199 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.9s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  14%|█████████▎                                                       | 3/21 [04:04<24:46, 82.56s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: liyan_20230802_148\n",
      "Process file liyan_20230802.set success!\n",
      "selected_subject: lizhuoru_20230720\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\lizhuoru_20230720.fdt\n",
      "Reading 0 ... 4684199  =      0.000 ...  4684.199 secs...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_31008\\3479991421.py:13: RuntimeWarning: Omitted 1 annotation(s) that were outside data range.\n",
      "  raw = mne.io.read_raw_eeglab(os.path.join(eeg_path, selected_file),\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_31008\\3479991421.py:13: RuntimeWarning: At least one event has a sample index of -1. This usually is a consequence of how eeglab handles event latency after resampling - especially when you had a boundary event at the beginning of the file. Please make sure that the events at the very beginning of your EEGLAB file can be safely dropped (e.g., because they are boundary events).\n",
      "  raw = mne.io.read_raw_eeglab(os.path.join(eeg_path, selected_file),\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    4.3s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  19%|████████████▏                                                   | 4/21 [06:28<30:15, 106.82s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: lizhuoru_20230720_148\n",
      "Process file lizhuoru_20230720.set success!\n",
      "selected_subject: lvpinxin_20230803\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\lvpinxin_20230803.fdt\n",
      "Reading 0 ... 3477599  =      0.000 ...  3477.599 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.1s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  24%|███████████████▍                                                 | 5/21 [07:37<24:49, 93.10s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: lvpinxin_20230803_148\n",
      "Process file lvpinxin_20230803.set success!\n",
      "selected_subject: mayiran_20230718\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\mayiran_20230718.fdt\n",
      "Reading 0 ... 4078199  =      0.000 ...  4078.199 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.4s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  29%|██████████████████▌                                              | 6/21 [08:57<22:09, 88.62s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: mayiran_20230718_148\n",
      "Process file mayiran_20230718.set success!\n",
      "selected_subject: wangjintao_20230719\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\wangjintao_20230719.fdt\n",
      "Reading 0 ... 3691199  =      0.000 ...  3691.199 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.2s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  33%|█████████████████████▋                                           | 7/21 [10:12<19:41, 84.38s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: wangjintao_20230719_148\n",
      "Process file wangjintao_20230719.set success!\n",
      "selected_subject: wangshuai_20230802\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\wangshuai_20230802.fdt\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_31008\\3479991421.py:13: RuntimeWarning: Omitted 1 annotation(s) that were outside data range.\n",
      "  raw = mne.io.read_raw_eeglab(os.path.join(eeg_path, selected_file),\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Reading 0 ... 3769199  =      0.000 ...  3769.199 secs...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_31008\\3479991421.py:13: RuntimeWarning: At least one event has a sample index of -1. This usually is a consequence of how eeglab handles event latency after resampling - especially when you had a boundary event at the beginning of the file. Please make sure that the events at the very beginning of your EEGLAB file can be safely dropped (e.g., because they are boundary events).\n",
      "  raw = mne.io.read_raw_eeglab(os.path.join(eeg_path, selected_file),\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.1s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  38%|████████████████████████▊                                        | 8/21 [11:28<17:38, 81.44s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: wangshuai_20230802_148\n",
      "Process file wangshuai_20230802.set success!\n",
      "selected_subject: wangsixian_20230719\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\wangsixian_20230719.fdt\n",
      "Reading 0 ... 4073099  =      0.000 ...  4073.099 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.6s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  43%|███████████████████████████▊                                     | 9/21 [12:50<16:20, 81.71s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: wangsixian_20230719_148\n",
      "Process file wangsixian_20230719.set success!\n",
      "selected_subject: wangxiaomin_20230718\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\wangxiaomin_20230718.fdt\n",
      "Reading 0 ... 3400499  =      0.000 ...  3400.499 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    2.9s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_146\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  48%|██████████████████████████████▍                                 | 10/21 [14:01<14:23, 78.47s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_147\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangxiaomin_20230718_148\n",
      "Process file wangxiaomin_20230718.set success!\n",
      "selected_subject: wangziheng_20230727\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\wangziheng_20230727.fdt\n",
      "Reading 0 ... 4010999  =      0.000 ...  4010.999 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.4s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  52%|█████████████████████████████████▌                              | 11/21 [15:18<12:58, 77.89s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: wangziheng_20230727_148\n",
      "Process file wangziheng_20230727.set success!\n",
      "selected_subject: wangzishan_20230717\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\wangzishan_20230717.fdt\n",
      "Reading 0 ... 4142199  =      0.000 ...  4142.199 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.6s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  57%|████████████████████████████████████▌                           | 12/21 [16:41<11:55, 79.49s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: wangzishan_20230717_148\n",
      "Process file wangzishan_20230717.set success!\n",
      "selected_subject: xietao_20230803\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\xietao_20230803.fdt\n",
      "Reading 0 ... 3782999  =      0.000 ...  3782.999 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.3s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  62%|███████████████████████████████████████▌                        | 13/21 [17:56<10:26, 78.31s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: xietao_20230803_148\n",
      "Process file xietao_20230803.set success!\n",
      "selected_subject: yangmi_20230728\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\yangmi_20230728.fdt\n",
      "Reading 0 ... 3938699  =      0.000 ...  3938.699 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.3s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  67%|██████████████████████████████████████████▋                     | 14/21 [19:11<09:01, 77.34s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: yangmi_20230728_148\n",
      "Process file yangmi_20230728.set success!\n",
      "selected_subject: yansen_20230731\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\yansen_20230731.fdt\n",
      "Reading 0 ... 3765599  =      0.000 ...  3765.599 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.1s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  71%|█████████████████████████████████████████████▋                  | 15/21 [20:25<07:36, 76.07s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: yansen_20230731_148\n",
      "Process file yansen_20230731.set success!\n",
      "selected_subject: yuelu_20230720\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\yuelu_20230720.fdt\n",
      "Reading 0 ... 3542999  =      0.000 ...  3542.999 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.0s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_107\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\ProgramData\\Anaconda3\\envs\\TF_2G\\lib\\site-packages\\numpy\\core\\fromnumeric.py:3432: RuntimeWarning: Mean of empty slice.\n",
      "  return _methods._mean(a, axis=axis, dtype=dtype,\n",
      "D:\\ProgramData\\Anaconda3\\envs\\TF_2G\\lib\\site-packages\\numpy\\core\\_methods.py:182: RuntimeWarning: invalid value encountered in divide\n",
      "  ret = um.true_divide(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  76%|████████████████████████████████████████████████▊               | 16/21 [21:34<06:10, 74.06s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: yuelu_20230720_148\n",
      "Process file yuelu_20230720.set success!\n",
      "selected_subject: zhangbuyuan_20230801\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\zhangbuyuan_20230801.fdt\n",
      "Reading 0 ... 3542999  =      0.000 ...  3542.999 secs...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_31008\\3479991421.py:13: RuntimeWarning: Omitted 5 annotation(s) that were outside data range.\n",
      "  raw = mne.io.read_raw_eeglab(os.path.join(eeg_path, selected_file),\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.0s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_145\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\ProgramData\\Anaconda3\\envs\\TF_2G\\lib\\site-packages\\numpy\\core\\fromnumeric.py:3432: RuntimeWarning: Mean of empty slice.\n",
      "  return _methods._mean(a, axis=axis, dtype=dtype,\n",
      "D:\\ProgramData\\Anaconda3\\envs\\TF_2G\\lib\\site-packages\\numpy\\core\\_methods.py:182: RuntimeWarning: invalid value encountered in divide\n",
      "  ret = um.true_divide(\n",
      "\r",
      "Processing files:  81%|███████████████████████████████████████████████████▊            | 17/21 [22:41<04:47, 71.85s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: zhangbuyuan_20230801_146\n",
      "Process file zhangbuyuan_20230801.set success!\n",
      "selected_subject: zhangdi_20230721\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\zhangdi_20230721.fdt\n",
      "Reading 0 ... 3721299  =      0.000 ...  3721.299 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.1s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  86%|██████████████████████████████████████████████████████▊         | 18/21 [23:54<03:36, 72.27s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: zhangdi_20230721_148\n",
      "Process file zhangdi_20230721.set success!\n",
      "selected_subject: zhaolei_20230803\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\zhaolei_20230803.fdt\n",
      "Reading 0 ... 4035899  =      0.000 ...  4035.899 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.4s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  90%|█████████████████████████████████████████████████████████▉      | 19/21 [25:13<02:28, 74.43s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: zhaolei_20230803_148\n",
      "Process file zhaolei_20230803.set success!\n",
      "selected_subject: zhaoshaohua_20230801\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\zhaoshaohua_20230801.fdt\n",
      "Reading 0 ... 4163399  =      0.000 ...  4163.399 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.5s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "Processing files:  95%|████████████████████████████████████████████████████████████▉   | 20/21 [26:34<01:16, 76.35s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: zhaoshaohua_20230801_148\n",
      "Process file zhaoshaohua_20230801.set success!\n",
      "selected_subject: zhengwansheng_20230718\n",
      "Reading E:\\10.Doctoral materials\\0.Micro-expression\\1.PROJECTS\\0.Multi-modality\\eeg_py\\eeg_for_mne\\zhengwansheng_20230718.fdt\n",
      "Reading 0 ... 3995399  =      0.000 ...  3995.399 secs...\n",
      "Filtering raw data in 1 contiguous segment\n",
      "Setting up band-pass filter from 0.04 - 48 Hz\n",
      "\n",
      "FIR filter parameters\n",
      "---------------------\n",
      "Designing a one-pass, zero-phase, non-causal bandpass filter:\n",
      "- Windowed time-domain design (firwin) method\n",
      "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n",
      "- Lower passband edge: 0.04\n",
      "- Lower transition bandwidth: 0.04 Hz (-6 dB cutoff frequency: 0.02 Hz)\n",
      "- Upper passband edge: 48.00 Hz\n",
      "- Upper transition bandwidth: 12.00 Hz (-6 dB cutoff frequency: 54.00 Hz)\n",
      "- Filter length: 82501 samples (82.501 s)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    3.4s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Get df_raw\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_101\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_102\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_103\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_104\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_105\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_106\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_107\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_108\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_109\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_110\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_111\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_112\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_113\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_114\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_115\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_116\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_117\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_118\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_119\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_120\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_121\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_122\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_123\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_124\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_125\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_126\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_127\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_128\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_129\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_130\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_131\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_132\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_133\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_134\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_135\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_136\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_137\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_138\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_139\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_140\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_141\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_142\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_143\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_144\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_145\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_146\n",
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_147\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Processing files: 100%|████████████████████████████████████████████████████████████████| 21/21 [27:54<00:00, 79.72s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rslt中是否有空值： False\n",
      "marker_new: zhengwansheng_20230718_148\n",
      "Process file zhengwansheng_20230718.set success!\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "from tqdm import tqdm\n",
    "import pickle\n",
    "\n",
    "for file in tqdm(filenames_set, desc=\"Processing files\"):\n",
    "    dict_marker_psd = {}\n",
    "    selected_subject = file.split('.')[0]\n",
    "    print('selected_subject:', selected_subject)\n",
    "    \n",
    "    eeg_path = 'eeg_py\\eeg_for_mne'\n",
    "    selected_file = selected_subject + '.set'\n",
    "    \n",
    "    # 加载数据\n",
    "    raw = mne.io.read_raw_eeglab(os.path.join(eeg_path, selected_file), \n",
    "        eog=(), \n",
    "        preload=False, \n",
    "        uint16_codec=None, \n",
    "        montage_units='auto', \n",
    "        verbose=None\n",
    "    ).load_data().filter(l_freq=0.04, h_freq=48)\n",
    "\n",
    "    # 删除异常值\n",
    "    markers_all = list(raw.annotations.description)\n",
    "    markers_retain = [str(marker) for marker in list(range(99, 149))] # 100~148\n",
    "    markers_del = list(set([item for item in markers_all if item not in markers_retain]))\n",
    "\n",
    "    to_remove = []\n",
    "    for m in markers_del:\n",
    "        to_remove.append(list(raw.annotations.description).index(m))\n",
    "        raw.annotations.delete(to_remove[-1])\n",
    "\n",
    "    # 转为dataframe\n",
    "    df_raw = raw.to_data_frame()\n",
    "    time_marker_dict = dict(zip(list(raw.annotations.onset), list(raw.annotations.description)))\n",
    "    df_raw.loc[:, 'marker'] = df_raw['time'].apply(lambda x: assign_marker(x, time_marker_dict))\n",
    "    \n",
    "    print('Get df_raw')\n",
    "    \n",
    "    for marker in [str(marker) for marker in list(range(101, 149))]:\n",
    "        if selected_subject == 'zhangbuyuan_20230801' and (marker == '147' or marker == '148'):\n",
    "            pass\n",
    "        \n",
    "        else:\n",
    "            # 根据marker筛选出对应的1min EEG数据\n",
    "            df_1min = df_raw[df_raw['marker']==marker]\n",
    "\n",
    "            # 给定1min EEG数据，apex的时刻，时间窗口，频带，返回对应的psd\n",
    "            psd_band = get_psd_by_window(df_1min)\n",
    "\n",
    "            marker_new = selected_subject + '_' + marker\n",
    "            print('marker_new:', marker_new)\n",
    "            dict_marker_psd[marker_new] = psd_band\n",
    "    \n",
    "    \n",
    "    # 将字典保存到.pkl文件\n",
    "    with open(os.path.join('psd_features', selected_subject + '.pkl'), 'wb') as f:\n",
    "        pickle.dump(dict_marker_psd, f)\n",
    "        \n",
    "    print(f'Process file {file} success!')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "53fa52ee",
   "metadata": {},
   "source": [
    "- 打开一个.pkl文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "id": "960ee0f3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['fengdengfang_20230802_101', 'fengdengfang_20230802_102', 'fengdengfang_20230802_103', 'fengdengfang_20230802_104', 'fengdengfang_20230802_105', 'fengdengfang_20230802_106', 'fengdengfang_20230802_107', 'fengdengfang_20230802_108', 'fengdengfang_20230802_109', 'fengdengfang_20230802_110', 'fengdengfang_20230802_111', 'fengdengfang_20230802_112', 'fengdengfang_20230802_113', 'fengdengfang_20230802_114', 'fengdengfang_20230802_115', 'fengdengfang_20230802_116', 'fengdengfang_20230802_117', 'fengdengfang_20230802_118', 'fengdengfang_20230802_119', 'fengdengfang_20230802_120', 'fengdengfang_20230802_121', 'fengdengfang_20230802_122', 'fengdengfang_20230802_123', 'fengdengfang_20230802_124', 'fengdengfang_20230802_125', 'fengdengfang_20230802_126', 'fengdengfang_20230802_127', 'fengdengfang_20230802_128', 'fengdengfang_20230802_129', 'fengdengfang_20230802_130', 'fengdengfang_20230802_131', 'fengdengfang_20230802_132', 'fengdengfang_20230802_133', 'fengdengfang_20230802_134', 'fengdengfang_20230802_135', 'fengdengfang_20230802_136', 'fengdengfang_20230802_137', 'fengdengfang_20230802_138', 'fengdengfang_20230802_139', 'fengdengfang_20230802_140', 'fengdengfang_20230802_141', 'fengdengfang_20230802_142', 'fengdengfang_20230802_143', 'fengdengfang_20230802_144', 'fengdengfang_20230802_145', 'fengdengfang_20230802_146', 'fengdengfang_20230802_147', 'fengdengfang_20230802_148'])"
      ]
     },
     "execution_count": 162,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 从单个.pkl文件中加载数据\n",
    "with open('psd_features/' + 'fengdengfang_20230802.pkl', 'rb') as f:\n",
    "    data = pickle.load(f)\n",
    "    \n",
    "data.keys()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d4066cc",
   "metadata": {},
   "source": [
    "### 将全部.pkl文件合并为一个"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "9e958c3d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "合并完成，存入merged_data.pkl\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import pickle\n",
    "\n",
    "# 合并多个.pkl文件到一个列表中\n",
    "def merge_pkl_files(directory):\n",
    "    # 获取目录下所有的.pkl文件\n",
    "    pkl_files = [f for f in os.listdir(directory) if f.endswith('.pkl')]\n",
    "    merged_data = []\n",
    "    for file in pkl_files:\n",
    "        file_path = os.path.join(directory, file)\n",
    "        # 从单个.pkl文件中加载数据\n",
    "        with open(file_path, 'rb') as f:\n",
    "            data = pickle.load(f)\n",
    "\n",
    "        merged_data.append(data)\n",
    "        \n",
    "    merged_file = directory + '/'+ 'merged_data.pkl'\n",
    "    # 多个字典合并成一个字典\n",
    "    merged_dict = {k: v for d in merged_data for k, v in d.items()}\n",
    "    \n",
    "    with open(merged_file, 'wb') as f:\n",
    "        pickle.dump(merged_dict, f)\n",
    "    \n",
    "directory = 'psd_features'  # .pkl文件所在的目录\n",
    "merged_data = merge_pkl_files(directory)\n",
    "print('合并完成，存入merged_data.pkl')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "abf0b725",
   "metadata": {},
   "source": [
    "# 分类模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "70bb1d18",
   "metadata": {},
   "source": [
    "## EEG-only"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "e67bfd11",
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch.nn.utils import weight_norm\n",
    "from functools import partial\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "from torch.nn.utils import weight_norm\n",
    "from torch.autograd import Function\n",
    "from timm.models.vision_transformer import PatchEmbed, Block, Mlp\n",
    "import numpy as np\n",
    "import argparse"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "42ad8c73",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Chomp1d(nn.Module):\n",
    "    def __init__(self, chomp_size):\n",
    "        super(Chomp1d, self).__init__()\n",
    "        self.chomp_size = chomp_size\n",
    "\n",
    "    def forward(self, x):\n",
    "        return x[:, :, :-self.chomp_size].contiguous()\n",
    "\n",
    "class PSD_PLV_CL(nn.Module):\n",
    "\n",
    "    def __init__(self, psd_features, plv_features):\n",
    "        super().__init__()\n",
    "\n",
    "        self.psd_features = psd_features\n",
    "        self.plv_features = plv_features\n",
    "\n",
    "        self.psd_AutoEncoder = AutoEncoder(psd_features)\n",
    "        self.plv_AutoEncoder = AutoEncoder(plv_features)\n",
    "\n",
    "    def info_nce_loss(self, f_psd, f_plv, temperature = 0.01):\n",
    "        \"\"\"\n",
    "            f_psd: (batch, dim)\n",
    "            f_plv: (batch, dim)\n",
    "        \"\"\"\n",
    "        similarity_matrix = torch.matmul(f_psd, f_plv.T)\n",
    "        labels = torch.eye(similarity_matrix.shape[0], dtype=torch.bool).to('cuda')\n",
    "\n",
    "        positives = similarity_matrix[labels.bool()].view(labels.shape[0], -1)\n",
    "        negatives = similarity_matrix[~labels.bool()].view(similarity_matrix.shape[0], -1)\n",
    "\n",
    "        logits = torch.cat([negatives, positives], dim=1)\n",
    "        # The label means the last column contain the positive pairs\n",
    "        labels = torch.ones(logits.shape[0], dtype=torch.long)*(logits.shape[1]-1)\n",
    "        labels = labels.to('cuda')\n",
    "\n",
    "        logits = logits / temperature\n",
    "        criterion = torch.nn.CrossEntropyLoss()\n",
    "        loss = criterion(logits, labels)\n",
    "        return loss\n",
    "\n",
    "    def forward(self, x, label=None):\n",
    "\n",
    "        psd, plv = x[:, :self.psd_features], x[:, self.psd_features:self.psd_features+self.plv_features]\n",
    "\n",
    "        psd_fea = self.psd_AutoEncoder.forward_encoder(psd)\n",
    "        plv_fea = self.plv_AutoEncoder.forward_encoder(plv)\n",
    "\n",
    "        loss_nec = self.info_nce_loss(psd_fea, plv_fea)\n",
    "\n",
    "        return loss_nec, psd_fea + plv_fea\n",
    "\n",
    "class TemporalBlock(nn.Module):\n",
    "    def __init__(self, n_inputs, n_outputs, kernel_size, stride, dilation, padding, dropout=0.2):\n",
    "        super(TemporalBlock, self).__init__()\n",
    "        self.conv1 = weight_norm(nn.Conv1d(n_inputs, n_outputs, kernel_size,\n",
    "                                           stride=stride, padding=padding, dilation=dilation))\n",
    "        self.chomp1 = Chomp1d(padding)\n",
    "        self.relu1 = nn.ReLU()\n",
    "        self.dropout1 = nn.Dropout(dropout)\n",
    "\n",
    "        self.conv2 = weight_norm(nn.Conv1d(n_outputs, n_outputs, kernel_size,\n",
    "                                           stride=stride, padding=padding, dilation=dilation))\n",
    "        self.chomp2 = Chomp1d(padding)\n",
    "        self.relu2 = nn.ReLU()\n",
    "        self.dropout2 = nn.Dropout(dropout)\n",
    "\n",
    "        self.net = nn.Sequential(self.conv1, self.chomp1, self.relu1, self.dropout1,\n",
    "                                 self.conv2, self.chomp2, self.relu2, self.dropout2)\n",
    "        self.downsample = nn.Conv1d(n_inputs, n_outputs, 1) if n_inputs != n_outputs else None\n",
    "        self.relu = nn.ReLU()\n",
    "        self.init_weights()\n",
    "\n",
    "    def init_weights(self):\n",
    "        self.conv1.weight.data.normal_(0, 0.01)\n",
    "        self.conv2.weight.data.normal_(0, 0.01)\n",
    "        if self.downsample is not None:\n",
    "            self.downsample.weight.data.normal_(0, 0.01)\n",
    "\n",
    "    def forward(self, x):\n",
    "        out = self.net(x)\n",
    "        res = x if self.downsample is None else self.downsample(x)\n",
    "        return self.relu(out + res)\n",
    "\n",
    "class TemporalConvNet(nn.Module):\n",
    "    def __init__(self, num_inputs, num_channels, kernel_size=2, dropout=0.2):\n",
    "        super(TemporalConvNet, self).__init__()\n",
    "        layers = []\n",
    "        num_levels = len(num_channels)\n",
    "        for i in range(num_levels):\n",
    "            dilation_size = 2 ** i\n",
    "            in_channels = num_inputs if i == 0 else num_channels[i-1]\n",
    "            out_channels = num_channels[i]\n",
    "            layers += [TemporalBlock(in_channels, out_channels, kernel_size, stride=1, dilation=dilation_size,\n",
    "                                     padding=(kernel_size-1) * dilation_size, dropout=dropout)]\n",
    "\n",
    "        self.network = nn.Sequential(*layers)\n",
    "\n",
    "    def forward(self, x):\n",
    "        return self.network(x)\n",
    "\n",
    "\n",
    "class ME_v2_TCN(nn.Module):\n",
    "    \"\"\" A Multi-task and Multi-phase Emotional EEG Learning Framework, (mmee learning framework)\n",
    "        MMOE + LSTM\n",
    "    \"\"\"    \n",
    "    def __init__(self, \n",
    "                 in_fea=300,\n",
    "                 tcn_depth = 1,\n",
    "                 hidden_neuron = 128,\n",
    "                 num_class=8,\n",
    "                 args=None):\n",
    "        super().__init__()\n",
    "        \n",
    "        self.gate_lstm_c_enc = TemporalConvNet(num_inputs=in_fea,num_channels=[hidden_neuron]*tcn_depth)\n",
    "        self.classification = torch.nn.Linear(in_features=hidden_neuron, out_features=num_class)\n",
    "\n",
    "    def forward(self, x, y_c, args=None):\n",
    "        # batch, dim, steps\n",
    "        x = x.permute(0, 2, 1)\n",
    "#         print(x.shape)\n",
    "        # batch, step, dim\n",
    "    \n",
    "        out_c = self.gate_lstm_c_enc(x)\n",
    "#         print(out_c.shape)\n",
    "        out_c = self.classification(out_c[:,:,-1]).squeeze()\n",
    "#         print(out_c.shape)\n",
    "        criterion = torch.nn.CrossEntropyLoss()\n",
    "        if len(out_c.size()) == 1:\n",
    "            out_c = out_c.unsqueeze(0)\n",
    "#         print(out_c.size(),len(out_c.size()))\n",
    "        cls_loss = criterion(out_c, y_c)\n",
    "        \n",
    "        return cls_loss, out_c"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3070cd95",
   "metadata": {},
   "source": [
    "# 10折交叉验证"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "80b7b8c2",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import KFold\n",
    "from torch.utils.data import DataLoader\n",
    "from torch.utils.data import TensorDataset, DataLoader\n",
    "from sklearn.metrics import accuracy_score, precision_score, recall_score,f1_score\n",
    "import pickle\n",
    "from tqdm import tqdm\n",
    "import torch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "723c1edd",
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(trainset, testset):\n",
    "    loader = DataLoader(trainset, batch_size = 64, shuffle = True)\n",
    "    model = ME_v2_TCN(in_fea=310,tcn_depth=6)\n",
    "    model.train() \n",
    "    # 优化器\n",
    "    optimizer = optim.SGD(model.parameters(), lr=1e-3)\n",
    "    # 学习率调度器\n",
    "    scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=60, gamma=0.3)\n",
    "\n",
    "    device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
    "    # 损失函数\n",
    "    criterion = nn.CrossEntropyLoss().to(device) \n",
    "    res_dict_train = {} # 存储每个观察的迭代周期的测试结果\n",
    "    res_dict_test = {}\n",
    "    n_epochs = 200\n",
    "    observed_epochs = set([i for i in range(0,n_epochs,10)])\n",
    "    for epoch in tqdm(range(n_epochs)): \n",
    "        losses = [] # 存储每个批次的损失值\n",
    "        for idx,(x,y) in enumerate(loader): \n",
    "#             print('x:', x.shape) # x: torch.Size([64, 40, 310])\n",
    "#             print('y:', y.shape) # y: torch.Size([64])\n",
    "            cls_loss, out_c = model(x, y) \n",
    "            optimizer.zero_grad() \n",
    "            cls_loss.backward() \n",
    "            optimizer.step()\n",
    "            losses.append(cls_loss.cpu().detach().numpy()) \n",
    "        if epoch in observed_epochs: \n",
    "            res_test = test(model,testset) \n",
    "            res_train = test(model,trainset) \n",
    "            res_dict_train[epoch] = res_train # 将当前观察周期的测试结果存储到字典中\n",
    "            res_dict_test[epoch] = res_test\n",
    "            model.train() \n",
    "#         print('Epoch ' + str(epoch))\n",
    "#                 print(np.mean(np.array(losses)))\n",
    "#             print(res)\n",
    "            #torch.save(model.state_dict(),'{}_.pth'.format(epoch))\n",
    "        scheduler.step() \n",
    "            \n",
    "    return res_dict_train, res_dict_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "60d002a4",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_metric(y,pred):\n",
    "    acc = accuracy_score(y, pred)\n",
    "    pre = precision_score(y, pred, average='macro')\n",
    "    uar = recall_score(y,pred,average = 'macro')\n",
    "    uf1 = f1_score(y,pred,average = 'macro')\n",
    "    return acc, pre, uar,uf1\n",
    "\n",
    "# 在给定的测试集上对模型进行测试并返回评估指标的结果\n",
    "def test(model,testset): \n",
    "    print('test......')\n",
    "    loader = DataLoader(testset, batch_size = 1, shuffle = True)\n",
    "    model.eval() # 将模型设为评估模式\n",
    "    y,pred = [],[] # 存储真实标签和预测标签\n",
    "    device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
    "    for idx,(x0,y0) in enumerate(loader):\n",
    "        y.append(y0[0]) # 将其添加到列表 y 中\n",
    "#         print('x0:',x0) # x0: torch.Size([1, 40, 310])\n",
    "#         print('y0:',y0) # y0: torch.Size([1])\n",
    "        cls_loss, out_c = model(x0,y0)\n",
    "#         print('out_c:', out_c)\n",
    "        # 找到预测结果中最大值对应的索引，作为预测标签，并将其添加到列表 pred 中\n",
    "#         cls_loss.cpu().detach().numpy()\n",
    "        pred.append(np.argmax(out_c.cpu().detach().numpy()))\n",
    "    y,pred = np.array(y),np.array(pred)\n",
    "    return get_metric(y,pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "60d874a6",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train_tensor: torch.Size([905, 40, 310])\n",
      "X_train_tensor: torch.Size([905, 40, 310])\n",
      "X_train_tensor: torch.Size([905, 40, 310])\n",
      "X_train_tensor: torch.Size([905, 40, 310])\n",
      "X_train_tensor: torch.Size([905, 40, 310])\n",
      "X_train_tensor: torch.Size([905, 40, 310])\n",
      "X_train_tensor: torch.Size([906, 40, 310])\n",
      "X_train_tensor: torch.Size([906, 40, 310])\n",
      "X_train_tensor: torch.Size([906, 40, 310])\n",
      "X_train_tensor: torch.Size([906, 40, 310])\n"
     ]
    }
   ],
   "source": [
    "# 打开.pkl文件\n",
    "directory = 'psd_features'  # .pkl文件所在的目录\n",
    "with open(directory + '/'+ 'merged_data.pkl', 'rb') as f:\n",
    "    # 使用pickle.load()函数加载数据\n",
    "    data_pkl = pickle.load(f) # 1008\n",
    "\n",
    "marker2label = {100: 0, 101: 1, 102: 2, 103: 3, 104: 4, 105: 5, 106: 6, 107: 7, 108: 8, 109: 1, 110: 2, 111: 3, 112: 2, \n",
    "                113: 4, 114: 5, 115: 6, 116: 7, 117: 8, 118: 1, 119: 2, 120: 3, 121: 4, 122: 5, 123: 3, 124: 6, 125: 7, \n",
    "                126: 8, 127: 1, 128: 2, 129: 3, 130: 4, 131: 5, 132: 6, 133: 7, 134: 4, 135: 8, 136: 1, 137: 2, 138: 3, \n",
    "                139: 4, 140: 5, 141: 6, 142: 7, 143: 8, 144: 5, 145: 6, 146: 7, 147: 8, 148: 1}\n",
    "\n",
    "\n",
    "# 提取特征和标签\n",
    "X = []\n",
    "y = []\n",
    "y_sub = []\n",
    "for key, value in data_pkl.items():\n",
    "    X.append(value)\n",
    "    y.append(key)\n",
    "    y_sub.append(key.split('_')[0] + '_' + key.split('_')[1])\n",
    "\n",
    "# 转换为numpy数组\n",
    "\n",
    "y_emo = np.array([marker2label[int(key.split('_')[-1])]-1 for key in y])\n",
    "# print(X.squeeze().shape,y)\n",
    "\n",
    "\n",
    "    \n",
    "# 转换为numpy数组\n",
    "X = np.array(X)\n",
    "y = np.array(y)\n",
    "\n",
    "# print(X.shape) # 1000+,1,40,310\n",
    "\n",
    "for g in set(y_sub):\n",
    "    \n",
    "    index = np.array(y_sub) == np.array(g)\n",
    "    \n",
    "    one_person_eeg = X[index]\n",
    "    \n",
    "    column_means = np.mean(one_person_eeg, axis=0)\n",
    "    column_stds = np.std(one_person_eeg, axis=0)\n",
    "    \n",
    "    normalized_data = (one_person_eeg - column_means) / column_stds\n",
    "    \n",
    "    X[index] = normalized_data    \n",
    "\n",
    "# print(column_means.shape, column_stds.shape)\n",
    "X = X.squeeze()\n",
    "# print(X.shape) # 1000+,1,40,310\n",
    "\n",
    "# 使用十折交叉验证\n",
    "kf = KFold(n_splits=10, shuffle=True)\n",
    "accuracies = []\n",
    "\n",
    "for train_index, test_index in kf.split(X):\n",
    "    X_train, X_test = X[train_index], X[test_index]\n",
    "    y_train, y_test = y[train_index], y[test_index]\n",
    "    y_train = [marker2label[int(key.split('_')[-1])]-1 for key in y_train]\n",
    "    y_test = [marker2label[int(key.split('_')[-1])]-1 for key in y_test]\n",
    "    \n",
    "    # 将numpy数组转换为PyTorch张量\n",
    "    X_train_tensor = torch.tensor(X_train, dtype=torch.float32)\n",
    "    y_train_tensor = torch.tensor(y_train, dtype=torch.int64)\n",
    "    X_test_tensor = torch.tensor(X_test, dtype=torch.float32)\n",
    "    y_test_tensor = torch.tensor(y_test, dtype=torch.int64)\n",
    "    \n",
    "    X_train_tensor = X_train_tensor.squeeze(dim=1)\n",
    "    X_test_tensor = X_test_tensor.squeeze(dim=1)\n",
    "    print('X_train_tensor:', X_train_tensor.shape)\n",
    "    \n",
    "    # 创建TensorDataset\n",
    "#     train_dataset = TensorDataset(X_train_tensor, y_train_tensor)\n",
    "#     test_dataset = TensorDataset(X_test_tensor, y_test_tensor)\n",
    "    \n",
    "#     res_dict_train, res_dict_test = train(train_dataset, test_dataset)\n",
    "    \n",
    "#     print('res_dict_train:', res_dict_train)\n",
    "#     print('res_dict_test:', res_dict_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "6b1eabd8",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X中是否有空值： False\n",
      "X: [[1.49279182e+01 2.93305017e+00 9.92482045e-01 ... 1.09172425e+00\n",
      "  5.19806111e-01 4.26190193e-01]\n",
      " [1.04299452e+01 1.86186141e+00 8.85422846e-01 ... 1.21770767e+00\n",
      "  9.28777387e-01 1.00842609e+00]\n",
      " [1.83294443e+01 2.76365463e+00 1.02510164e+00 ... 6.14173787e-01\n",
      "  3.79508929e-01 2.24391512e-01]\n",
      " ...\n",
      " [1.83194836e+02 3.85148681e+01 1.14893666e+01 ... 2.06068090e+00\n",
      "  5.89660326e-01 2.75400015e-01]\n",
      " [3.06107560e+02 3.54494842e+01 1.06522290e+01 ... 1.66005176e+00\n",
      "  5.41355954e-01 2.64484769e-01]\n",
      " [3.98363422e+02 4.57230215e+01 1.15410258e+01 ... 2.01359524e+00\n",
      "  6.16755112e-01 2.56952451e-01]]\n"
     ]
    }
   ],
   "source": [
    "# 打开.pkl文件\n",
    "directory = 'psd_features'  # .pkl文件所在的目录\n",
    "with open(directory + '/'+ 'merged_data.pkl', 'rb') as f:\n",
    "    # 使用pickle.load()函数加载数据\n",
    "    data_pkl = pickle.load(f) # 1008\n",
    "\n",
    "marker2label = {100: 0, 101: 1, 102: 2, 103: 3, 104: 4, 105: 5, 106: 6, 107: 7, 108: 8, 109: 1, 110: 2, 111: 3, 112: 2, \n",
    "                113: 4, 114: 5, 115: 6, 116: 7, 117: 8, 118: 1, 119: 2, 120: 3, 121: 4, 122: 5, 123: 3, 124: 6, 125: 7, \n",
    "                126: 8, 127: 1, 128: 2, 129: 3, 130: 4, 131: 5, 132: 6, 133: 7, 134: 4, 135: 8, 136: 1, 137: 2, 138: 3, \n",
    "                139: 4, 140: 5, 141: 6, 142: 7, 143: 8, 144: 5, 145: 6, 146: 7, 147: 8, 148: 1}\n",
    "\n",
    "\n",
    "# 提取特征和标签\n",
    "X = []\n",
    "y = []\n",
    "for key, value in data_pkl.items():\n",
    "    X.append(value)\n",
    "    y.append(key)\n",
    "\n",
    "has_nan = np.isnan(X).any()\n",
    "print(\"X中是否有空值：\", has_nan)\n",
    "\n",
    "\n",
    "# 转换为numpy数组\n",
    "X = np.array(X).squeeze(1).mean(axis=1)\n",
    "y = np.array([marker2label[int(key.split('_')[-1])]-1 for key in y])\n",
    "\n",
    "# X_mean = X.mean(axis=1)\n",
    "\n",
    "# # print(X_mean.tolist().count('nan'))\n",
    "# print(X_mean.tolist())\n",
    "print('X:',X)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8640d2c8",
   "metadata": {},
   "source": [
    "# SVM 模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "0612c781",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.35 (+/- 0.14)\n"
     ]
    }
   ],
   "source": [
    "from sklearn import datasets\n",
    "from sklearn.model_selection import cross_val_score\n",
    "from sklearn.svm import SVC\n",
    "\n",
    "# 打开.pkl文件\n",
    "directory = 'psd_features'  # .pkl文件所在的目录\n",
    "with open(directory + '/'+ 'merged_data.pkl', 'rb') as f:\n",
    "    # 使用pickle.load()函数加载数据\n",
    "    data_pkl = pickle.load(f) # 1008\n",
    "\n",
    "marker2label = {100: 0, 101: 1, 102: 2, 103: 3, 104: 4, 105: 5, 106: 6, 107: 7, 108: 8, 109: 1, 110: 2, 111: 3, 112: 2, \n",
    "                113: 4, 114: 5, 115: 6, 116: 7, 117: 8, 118: 1, 119: 2, 120: 3, 121: 4, 122: 5, 123: 3, 124: 6, 125: 7, \n",
    "                126: 8, 127: 1, 128: 2, 129: 3, 130: 4, 131: 5, 132: 6, 133: 7, 134: 4, 135: 8, 136: 1, 137: 2, 138: 3, \n",
    "                139: 4, 140: 5, 141: 6, 142: 7, 143: 8, 144: 5, 145: 6, 146: 7, 147: 8, 148: 1}\n",
    "\n",
    "\n",
    "# 提取特征和标签\n",
    "X = []\n",
    "y = []\n",
    "y_sub = []\n",
    "for key, value in data_pkl.items():\n",
    "    X.append(value)\n",
    "    y.append(key)\n",
    "    y_sub.append(key.split('_')[0] + '_' + key.split('_')[1])\n",
    "\n",
    "# print(y_sub)\n",
    "\n",
    "# 转换为numpy数组\n",
    "X = np.log(np.array(X).squeeze().mean(axis=1))\n",
    "y_emo = np.array([marker2label[int(key.split('_')[-1])]-1 for key in y])\n",
    "# print(X.squeeze().shape,y)\n",
    "\n",
    "for g in set(y_sub):\n",
    "    \n",
    "    index = np.array(y_sub) == np.array(g)\n",
    "    \n",
    "    one_person_eeg = X[index]\n",
    "    \n",
    "    column_means = np.mean(one_person_eeg, axis=0)\n",
    "    column_stds = np.std(one_person_eeg, axis=0)\n",
    "    \n",
    "    normalized_data = (one_person_eeg - column_means) / column_stds\n",
    "    \n",
    "    X[index] = normalized_data\n",
    "    \n",
    "# 创建SVM模型，使用线性核函数\n",
    "svm_linear = SVC(kernel='linear', C=1)\n",
    "\n",
    "# svm_linear.fit(X_mean.tolist(), y)\n",
    "\n",
    "# 进行十折交叉验证\n",
    "scores = cross_val_score(svm_linear, X, y_emo, cv=10)\n",
    "\n",
    "# 输出每次验证的准确率\n",
    "print(\"Accuracy: %0.2f (+/- %0.2f)\" % (scores.mean(), scores.std() * 2))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "39c7d8f2",
   "metadata": {},
   "source": [
    "# SVM-matlab"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "0155f1d9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "name_paths: ['01_7.17wangzishan_eeg_psd_fea.mat', '02_7.18mayiran_eeg_psd_fea.mat', '03_7.18wangxiaomin_eeg_psd_fea.mat', '04_7.18zhengwansheng_eeg_psd_fea.mat', '05_7.19linjiaying_eeg_psd_fea.mat', '06_7.19wangjintao_eeg_psd_fea.mat', '07_7.19wangsixian_eeg_psd_fea.mat', '08_7.20lizhuoru_eeg_psd_fea.mat', '09_7.20shitianyang_eeg_psd_fea.mat', '10_7.20yuelu_eeg_psd_fea.mat', '11_7.21hantianhao_eeg_psd_fea.mat', '12_7.21wujinghan_eeg_psd_fea.mat', '13_7.21zhangdi_eeg_psd_fea.mat', '14_7.27wangxinyi_eeg_psd_fea.mat', '15_7.27wangziheng_eeg_psd_fea.mat', '16_7.28liuhaoyu_eeg_psd_fea.mat', '17_7.28yangmi_eeg_psd_fea.mat', '18_7.28zhengchangyan_eeg_psd_fea.mat', '19_7.31qiangweihua_eeg_psd_fea.mat', '20_7.31shengxin_eeg_psd_fea.mat', '21_7.31yansen_eeg_psd_fea.mat', '22_8.1wangsen_eeg_psd_fea.mat', '23_8.1zhangbuyuan_eeg_psd_fea.mat', '24_8.1zhaoshaohua_eeg_psd_fea.mat', '25_8.2fengdengfang_eeg_psd_fea.mat', '26_8.2liyan_eeg_psd_fea.mat', '27_8.2wangshuai_eeg_psd_fea.mat', '28_8.2xietao_eeg_psd_fea.mat', '29_8.3lvpinxin_eeg_psd_fea.mat', '30_8.3qingwenyang_eeg_psd_fea.mat', '31_8.3zhaolei_eeg_psd_fea.mat', '32_8.8xiaominwang_eeg_psd_fea.mat']\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "# 获取data目录下的所有文件和文件夹\n",
    "name_paths = os.listdir('features_by_py/')\n",
    "print('name_paths:', name_paths)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "71d7922d",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.5555555555555556\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.6266666666666667\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.6866666666666665\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.6688888888888889\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.3244444444444444\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8]\n",
      "Accuracy: 0.4955555555555556\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.6044444444444445\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.5866666666666667\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.45777777777777773\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.47555555555555556\n",
      "Yemo: [1 2 3 4 5 6 7 1 2 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2 3 4\n",
      " 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.3977777777777778\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.731111111111111\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.37111111111111106\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.29333333333333333\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.4177777777777778\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.5888888888888888\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.49777777777777776\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.5577777777777777\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.5222222222222221\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.5822222222222223\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.6288888888888888\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.3333333333333333\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.3688888888888889\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.45555555555555555\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.5022222222222222\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.35333333333333333\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.6022222222222222\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.6466666666666667\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.2888888888888889\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.45777777777777773\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.5866666666666667\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n",
      "Accuracy: 0.5777777777777777\n",
      "Yemo: [1 2 3 4 5 6 7 8 1 2 3 2 4 5 6 7 8 1 2 3 4 5 3 6 7 8 1 2 3 4 5 6 7 4 8 1 2\n",
      " 3 4 5 6 7 8 5 6 7 8 1]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy.io import loadmat\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.model_selection import cross_val_score\n",
    "\n",
    "X = []\n",
    "Ye = []\n",
    "Ys = []\n",
    "\n",
    "for sub in range(len(name_paths)):\n",
    "    data = loadmat(os.path.join('features_by_py', name_paths[sub]))\n",
    "    Xpsd = data['Xpsd']\n",
    "    Yemo = data['Yemo']\n",
    "    Ysub = data['Ysub']\n",
    "    # 使用ravel()函数将其转换为一维数组\n",
    "    Yemo = Yemo.ravel()\n",
    "\n",
    "    # 创建SVM分类器对象\n",
    "    clf = SVC(kernel='linear')\n",
    "    # 使用10折交叉验证计算准确率\n",
    "    accuracy = cross_val_score(clf, Xpsd, Yemo, cv=5).mean()\n",
    "\n",
    "    print(\"Accuracy:\", accuracy)\n",
    "    print('Yemo:', Yemo)\n",
    "\n",
    "    X.append(Xpsd)\n",
    "    Ye.append(Yemo)\n",
    "    Ys.append(Ysub)\n",
    "\n",
    "X = np.concatenate(X, axis=0)\n",
    "Ye = np.concatenate(Ye, axis=0)\n",
    "Ys = np.concatenate(Ys, axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3c6b8f16",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:TF_2G]",
   "language": "python",
   "name": "conda-env-TF_2G-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "729px",
    "left": "23px",
    "top": "111.125px",
    "width": "250px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
